Borrar excluyendo directorios [Solucionado]
Publicado: 5 Julio, 2011 - 12:06 Borrar excluyendo directorios [Solucionado]
Hola a todos, estoy intentando crear un script para hacer backups. Los directorios los tengo asi:
host1
2011-06
file1
2011-07
file2
host2
2011-06
file3
2011-07
file4
file5
file6
host3
2011-06
file7
2011-07
file8
...Lo que hage es el dia 1 de cada mes ejecuto el script y comprimo todos los ficheros de meses anteriores asi:
tar -cvzpf 2011-06.tar.gz /ruta_de_los_ficheros/ --exclude='2011-07'Asi no guardo nada del mes actual.
Ahora que he empaquetado todo lo del mes anterior lo quiero es borralo. ¿Como puedo borrar todos los directorios del mes pasado (2011-06)?
Segun el manual de rm, no dispone de la opcion de excluir, me imagino que tendre que hacer un pequeño script o algo con "find", pero no se como.
Agradezco cualquier ayuda.
Gracias por todo y hasta pronto.
Saludos.
- Inicie sesión o regístrese para enviar comentarios
- 394 lecturas


http://www.google.com/search?q=rm+exclude+directory
Si lo que quieres es borrar según un patrón de nombre de fichero puedes usar esto:
rm -rf `find . -name "2011-06*"`
Ojo, esto borrará forzando y recursivamente todos los ficheros y directorios que empiecen por 2011-06 en las subramas del punto del árbol de directorios desde el que lances el comando.
Otra forma para no usar las comillas ` es usar el parámetro -exec de find, échale un vistazo al man. Otra mejora es que uses el -type de find para especificar directorios, de nuevo, man es tu amigo.
http://www.google.com/search?q=rm+exclude+directory
Si lo que quieres es borrar según un patrón de nombre de fichero puedes usar esto:
rm -rf `find . -name "2011-06*"`
Ojo, esto borrará forzando y recursivamente todos los ficheros y directorios que empiecen por 2011-06 en las subramas del punto del árbol de directorios desde el que lances el comando.
Otra forma para no usar las comillas ` es usar el parámetro -exec de find, échale un vistazo al man. Otra mejora es que uses el -type de find para especificar directorios, de nuevo, man es tu amigo.
Muchisimas gracias, he probado de las dos formas:
rm -rf `find /ruta_de_los_ficheros/ -type d -name "2011-06"`Este me va bien.
find /ruta_de_los_ficheros/ -type d -name "2011-06" -exec rm -rf {} \;Este me borra los directorios me da un aviso a la salida:
find: `/ruta_de_los_ficheros/host1/2011-06': No such file or directoryfind: `/ruta_de_los_ficheros/host2/2011-06': No such file or directory
Me quedo con el primero.
Muchas gracias por todo.
Saludos.
Por favor pon el tema como solucionado
Puedes también usar "argumentos" que sirvan como "variables". Por ejemplo:
#!/bin/bashrm -rf `find /ruta_de_los_ficheros/ -type d -name "$1"`
Observa que la variable $1 tendrá el valor de lo que tú hayas introducido en la línea de comandos, por ejemplos:
$ ./script.sh 2011-06$ ./script.sh 2011-12
$ ./script.sh 2003-01
De esa manera no tendrás que estar modificando tu script cada mes, sólo le agregas la fecha que deseas manejar.
Saludos,
Sidd.
Puedes también usar "argumentos" que sirvan como "variables". Por ejemplo:
#!/bin/bashrm -rf `find /ruta_de_los_ficheros/ -type d -name "$1"`
Observa que la variable $1 tendrá el valor de lo que tú hayas introducido en la línea de comandos, por ejemplos:
$ ./script.sh 2011-06$ ./script.sh 2011-12
$ ./script.sh 2003-01
De esa manera no tendrás que estar modificando tu script cada mes, sólo le agregas la fecha que deseas manejar.
Saludos,
Sidd.
Muchisimas gracias a todos, he creado el siguiente script para ello:
#!/bin/bashfecha_actual=$(date +"%Y-%m")
mes_anterior=$(date --date='-1 month' +"%Y-%m")
echo "Fecha actual: "$fecha_actual
echo "Mes anterior: "$mes_anterior
#Comprimir excluyendo mes actual:
tar -cvzpf /ruta_de_los_ficheros/$mes_anterior.tar.gz /ruta_de_los_ficheros/ --exclude="$fecha_actual"
#Borrar los directorios comprimidos:
rm -rf `find /ruta_de_los_ficheros/ -type d -name "$mes_anterior"`
Lo dejo como solucionado.
Saludos y hasta pronto.
Pues no veo que hayas puesto el tema como solucionado, debajo de tu avatar en el primer mensaje tienes el combo para ello
Pues no veo que hayas puesto el tema como solucionado, debajo de tu avatar en el primer mensaje tienes el combo para ello
Uiii, se me ha pasado.
Ya lo pongo.
Gracias y saludos.