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:
#!/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...
Bueno, el problema es la expansión de las variables, aquí te dejo un ejemplo:
#!/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]$
└─>
Gracias por tu respuesta man, al rato me pondre a verificar mi codigo y aplicare tu recomendacion. Ya contare los resultados.
Cita de: Leo Gutiérrez. en 13 Mayo 2011, 01:55 AM
#!/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:
[[ -d "$destino" ]] || {
exit 1;
}
Saludos! :P
Así es, lo hice rápido, no me fije bien.