Problema script bash ruta de directorio en variable

Iniciado por InuKen, 12 Mayo 2011, 05:23 AM

0 Miembros y 1 Visitante están viendo este tema.

InuKen

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 (bash) [Seleccionar]
#!/bin/bash

echo "Escribe la ruta donde se encuentran los archivos a mover"
read ruta_origen

if [ -d "$ruta_origen" ]
  then
     echo "Escribe las extensiones separadas por comas de los tipos de archivos a mover"
     read extensiones

     echo "Escribe la ruta donde quieres mover tus archivo..."
     read ruta_destino

     if [ -d "$ruta_destino" ]
        then

           ls "$ruta_origen"*.{"$extensiones"} > /tmp/lista_archivos.txt

           for linea in $(cat /tmp/lista_archivos.txt)
           do  
              mv ${ruta_origen}$linea $ruta_destino
           done
           clear
           echo "Los archivos se movieron correctamente"
        else
           echo "El directorio no existe, no se puede continuar"
     fi

  else
     echo "El directorio no existe, no se puede continuar"
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...

leogtz

Bueno, el problema es la expansión de las variables, aquí te dejo un ejemplo:

Código (bash) [Seleccionar]
#!/bin/bash

read -p "Escribe la ruta de los archivos a mover : " ruta
echo -e "Ruta : $ruta"
# Salimos si la ruta no existe:
[[ -d "$ruta" ]] || {
exit 1;
}

read -p "Escribe las extensiones separadas por comas : " ext

read -p "Escribe la ruta donde quieres mover tus archivos : " destino
# Salimos si la ruta no existe:
[[ -d "$ruta" ]] || {
exit 1;
}

IFS=","
for i in `echo -e "${ext}" | tr -d ' '`
do
mv -vi "${ruta}"/*.${i} "${destino}"
done


┌─[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]$
└─>
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

InuKen

Gracias por tu respuesta man, al rato me pondre a verificar mi codigo y aplicare tu recomendacion. Ya contare los resultados.

xassiz~

Cita de: Leo Gutiérrez. en 13 Mayo 2011, 01:55 AM
Código (bash,14) [Seleccionar]
#!/bin/bash

read -p "Escribe la ruta de los archivos a mover : " ruta
echo -e "Ruta : $ruta"
# Salimos si la ruta no existe:
[[ -d "$ruta" ]] || {
exit 1;
}

read -p "Escribe las extensiones separadas por comas : " ext

read -p "Escribe la ruta donde quieres mover tus archivos : " destino
# Salimos si la ruta no existe:
[[ -d "$ruta" ]] || {
exit 1;
}

IFS=","
for i in `echo -e "${ext}" | tr -d ' '`
do
mv -vi "${ruta}"/*.${i} "${destino}"
done

Creo que querías poner:
Código (bash,1) [Seleccionar]

[[ -d "$destino" ]] || {
exit 1;
}


Saludos! :P

leogtz

Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com