
Soy muy nuevo en scripting bash y estoy realmente atascado en el método de búsqueda de Ubuntu. Quiero buscar en la carpeta /opt/
todas las carpetas para ver si son anteriores a una fecha específica. Si son más antiguos, los archivos de esta carpeta deben eliminarse (y la carpeta misma, en realidad, también). Si la fecha aún es demasiado nueva, no se deben tocar los archivos.
Lo que tengo en código:
find $BACKUP_DIR -maxdepth 1 -mtime +$DAYS_TO_KEEP -name "*$mystring" -exec rm -rf '{}' ';'
Las variables contienen estos valores:
BACKUP_DIR=/opt/
TESTDIR=2014-11-25-daily_testmachine
mystring=-daily_testmachine
Si la variable $DAYS_TO_KEEP
es 2, la fecha es 2014-11-25 y el nombre de la carpeta es 2014-11-20-daily_testmachine
la carpeta y su contenido debe eliminarse.
¿Qué estoy haciendo mal para que buscar no elimine/encuentre estos archivos y carpetas para eliminar? Parece que no puedo encontrar el error.
Nota:si ejecuto el comando con el nombre de cadena exacto de la carpeta que contiene, la carpeta se eliminará. Entonces tengo algo mal en mi formato o nombre.
find $BACKUP_DIR -maxdepth 1 -name "2014-11-20-daily_testmachine" -exec rm -rf '{}' ';'
Para aclarar las cosas, hice una captura de pantalla para mostrar la configuración:
Respuesta1
Mi error fue un error lógico con -mtime
. Pensé que mi secuencia de comandos estaba verificando los nombres pero -mtime
verifica la fecha en que se creó el archivo. Entonces mi código final:
DAYS_TO_KEEP=2
find $BACKUP_DIR -maxdepth 1 -mtime +"$DAYS_TO_KEEP" -exec rm -rf {} \;
Solo tuve que hacer una búsqueda sudo touch -d "3 days ago" /filepath/folderToRemove
para -mname
encontrar la carpeta.yasegúrese de que el archivo tenga la edad suficiente para eliminarlo. Entonces este código final elimina todas las carpetas que son más antiguas que mi variable.$DAYS_TO_KEEP