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.

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.

jsa_ escribió:

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 directory
find: `/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/bash
rm -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.

susurro no olvides marcar tu tema como solucionado wink

siddharta escribió:

Puedes también usar "argumentos" que sirvan como "variables". Por ejemplo:

#!/bin/bash
rm -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.

susurro no olvides marcar tu tema como solucionado wink

Muchisimas gracias a todos, he creado el siguiente script para ello:

#!/bin/bash

fecha_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

cnicolas escribió:

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.