Supongamos que tenemos un script corriendo en un sistema operativo Linux cuya función es conectarse a un dispositivo y exportar un backup de su configuración para guardarlo en local.
Si ejecutamos dicho script a diario, el sistema de archivos donde se guarden dichos backups se llenará de archivos, lo cual provocará que, a la larga, el disco duro llegue al 100% de ocupación y el sistema operativo deje de funcionar. Para evitar este problema, podemos usar un comando que vaya eliminando archivos cuya fecha de creación sea más antigua de X días. Dicho de otra forma, vamos a ver cómo realizar rotación de backups estableciendo un período de retención de X días.
Comando
Podemos eliminar archivos más antiguos de X días mediante el comando find:
HOST# find /ruta/ -type f -mtime +10 -delete
Analicemos sus parámetros:
• find: invocamos el comando find para buscar archivos.
• /ruta/: ruta absoluta hacia el directorio donde se encuentran los archivo a eliminar.
• -type f: solo eliminar archivos (sino, se eliminarían también directorios).
• -mtime +10: eliminar archivos cuyo contenido no haya sido modificado en más de 10 días.
• -delete: eliminar los archivos que cumplan las condiciones anteriormente descritas. Este parámetro siempre debe ir al final de la cadena de parámetros.
Opciones adicionales
Opcionalmente, podemos añadir estos parámetros (y más):
• -mindepth 1: procesar todos los directorios por debajo de la ruta absoluta, excepto los de la ruta en sí.
• -maxdepth X: solo eliminar archivos hasta X niveles (carpetas) por debajo de la ruta absoluta.
• -name "*.bak": eliminar solamente archivos con extensión .bak.
Alternativa
Alternativamente, podríamos usar el comando find con el parámetro -exec si la opción -delete no estuviera disponible en el sistema operativo o la shell que estemos usando.
Para usar la opción -exec, debemos invocarla de la siguiente manera:
HOST# find /ruta/ -type f -mtime +10 -exec rm {} \;
Decir que con este parámetro tendremos problemas si los nombres de archivo tienen espacios, comillas, etc. por lo que es aconsejable usar la opción -delete en vez de -exec rm {} \; a la hora de invocar el comando find para eliminar archivos, siempre que sea posible.
Reflexión final
Antes de usar la opción -delete no estaria de más ejecutar el comando sin esa opción, lo cual nos mostrará por pantalla la lista de archivos que encuentra. Una vez hayamos configurado opciones como mindepth, name y type a nuestro gusto y hayamos verificado qué archivos se van a eliminar, ya podemos usar -delete para eliminar esos archivos de forma segura.
Fuentes:
https://unix.stackexchange.com/questions/194863/delete-files-older-than-x-days
https://www.geeksforgeeks.org/mindepth-maxdepth-linux-find-command-limiting-search-specific...