Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: InuKen en 12 Mayo 2011, 05:23 am



Título: Problema script bash ruta de directorio en variable
Publicado por: InuKen en 12 Mayo 2011, 05:23 am
Que tal, buenas noches!

Estoy aprendiendo a crear scripts en bash, y estoy haciendo un script el cual te mueve todos los ficheros de las extensiones que tu le indiques de una ruta origen a una ruta destino. Este script es solo didactico, pues estoy practicando el uso de for e if.

El script es el siguiente:


Código
  1. #!/bin/bash
  2.  
  3. echo "Escribe la ruta donde se encuentran los archivos a mover"
  4. read ruta_origen
  5.  
  6. if [ -d "$ruta_origen" ]
  7.   then
  8.      echo "Escribe las extensiones separadas por comas de los tipos de archivos a mover"
  9.      read extensiones
  10.  
  11.      echo "Escribe la ruta donde quieres mover tus archivo..."
  12.      read ruta_destino
  13.  
  14.      if [ -d "$ruta_destino" ]
  15.         then
  16.  
  17.            ls "$ruta_origen"*.{"$extensiones"} > /tmp/lista_archivos.txt
  18.  
  19.            for linea in $(cat /tmp/lista_archivos.txt)
  20.            do  
  21.               mv ${ruta_origen}$linea $ruta_destino
  22.            done
  23.            clear
  24.            echo "Los archivos se movieron correctamente"
  25.         else
  26.            echo "El directorio no existe, no se puede continuar"
  27.      fi
  28.  
  29.   else
  30.      echo "El directorio no existe, no se puede continuar"
  31. fi

El script almacena en una variable la ruta_origen, en otra la ruta_destino y en una tercera las extensiones que tiene que mover. Sin embargo al llamar dos variables en la instruccion del comando ls lo hago de la siguiente manera: ls "$ruta_origen"*.{"$extensiones"}. El problema que el script al llegar a esa linea, me indica que la ruta no existe, cuando el error mostrado me muestra realmente la ruta que es, pero el interprete bash muestra que no, que no existe. Que pasa?


He buscado por internet, pero no encuentro nada...

Alguna idea?

De antemano, gracias...


Título: Re: Problema script bash ruta de directorio en variable
Publicado por: leogtz en 13 Mayo 2011, 01:55 am
Bueno, el problema es la expansión de las variables, aquí te dejo un ejemplo:

Código
  1. #!/bin/bash
  2.  
  3. read -p "Escribe la ruta de los archivos a mover : " ruta
  4. echo -e "Ruta : $ruta"
  5. # Salimos si la ruta no existe:
  6. [[ -d "$ruta" ]] || {
  7. exit 1;
  8. }
  9.  
  10. read -p "Escribe las extensiones separadas por comas : " ext
  11.  
  12. read -p "Escribe la ruta donde quieres mover tus archivos : " destino
  13. # Salimos si la ruta no existe:
  14. [[ -d "$ruta" ]] || {
  15. exit 1;
  16. }
  17.  
  18. IFS=","
  19. for i in `echo -e "${ext}" | tr -d ' '`
  20. do
  21. mv -vi "${ruta}"/*.${i} "${destino}"
  22. done
  23.  

Código:
┌─[0 leo@archero ~/Desktop]$
└─> bash shell.sh
Escribe la ruta de los archivos a mover : /home/leo/Desktop
Ruta : /home/leo/Desktop
Escribe las extensiones separadas por comas : doc, txt, c, jpg
Escribe la ruta donde quieres mover tus archivos : /home/leo/
`/home/leo/Desktop/CV.doc' -> `/home/leo/CV.doc'
`/home/leo/Desktop/CV.n.doc' -> `/home/leo/CV.n.doc'
`/home/leo/Desktop/arreglos.txt' -> `/home/leo/arreglos.txt'
`/home/leo/Desktop/comandos.txt' -> `/home/leo/comandos.txt'
`/home/leo/Desktop/code.c' -> `/home/leo/code.c'
`/home/leo/Desktop/instructivo 1.jpg' -> `/home/leo/instructivo 1.jpg'
┌─[0 leo@archero ~/Desktop]$
└─>


Título: Re: Problema script bash ruta de directorio en variable
Publicado por: InuKen en 13 Mayo 2011, 06:49 am
Gracias por tu respuesta man, al rato me pondre a verificar mi codigo y aplicare tu recomendacion. Ya contare los resultados.


Título: Re: Problema script bash ruta de directorio en variable
Publicado por: xassiz~ en 13 Mayo 2011, 14:53 pm
Código
  1. #!/bin/bash
  2.  
  3. read -p "Escribe la ruta de los archivos a mover : " ruta
  4. echo -e "Ruta : $ruta"
  5. # Salimos si la ruta no existe:
  6. [[ -d "$ruta" ]] || {
  7. exit 1;
  8. }
  9.  
  10. read -p "Escribe las extensiones separadas por comas : " ext
  11.  
  12. read -p "Escribe la ruta donde quieres mover tus archivos : " destino
  13. # Salimos si la ruta no existe:
  14. [[ -d "$ruta" ]] || {
  15. exit 1;
  16. }
  17.  
  18. IFS=","
  19. for i in `echo -e "${ext}" | tr -d ' '`
  20. do
  21. mv -vi "${ruta}"/*.${i} "${destino}"
  22. done
  23.  
Creo que querías poner:
Código
  1. [[ -d "$destino" ]] || {
  2. exit 1;
  3. }
  4.  

Saludos! :P


Título: Re: Problema script bash ruta de directorio en variable
Publicado por: leogtz en 14 Mayo 2011, 00:46 am
Así es, lo hice rápido, no me fije bien.