La administración de servidores requiere, ante todo, previsibilidad. Uno de los problemas más comunes (y evitables) en la gestión de infraestructura es el llenado del disco debido a archivos antiguos, backups acumulados o logs que no rotan adecuadamente. En este post comento como logre la automatización de limpieza con bash de forma ordenada y segura.
Si bien existen herramientas como logrotate, a veces necesitamos soluciones personalizadas para directorios específicos donde se almacenan volcados de base de datos o reportes generados por aplicaciones legacy.
El Problema
Teníamos directorios críticos donde se acumulaban archivos diariamente. Realizar una limpieza manual no solo es tedioso, sino que conlleva riesgos humanos (como borrar la carpeta equivocada por accidente). La regla es simple: si es una tarea repetitiva, debe ser automatizada.
La Solución: Bash + Find
Desarrollé un script que audita las rutas definidas y elimina el contenido obsoleto.

Vamos al detalle…
El corazón de este script reside en el comando find. Analicemos la línea clave:
find "$DIR" -mindepth 1 -type d -mtime +90 -print -exec rm -rf {} +
Para asegurar que el script sea seguro y eficiente, utilicé los siguientes parámetros:
- Seguridad ante todo (
-mindepth 1): Esta es quizás la bandera más importante. Asegura que el comandofindprocese el contenido dentro del directorio, pero jamás el directorio padre en sí mismo. Esto evita que, por un error de cálculo, eliminemos el punto de montaje o la carpeta raíz del backup. - Filtrado por tiempo (
-mtime +90): Buscamos archivos o directorios que no hayan sido modificados en los últimos 90 días (3 meses). Este umbral es totalmente configurable según la política de retención de la empresa. - Tipo de archivo (
-type d): En este caso específico, me interesaba limpiar estructuras de directorios antiguas, pero esto puede cambiarse a-type fsi solo buscamos archivos sueltos. - Ejecución eficiente (
-exec ... +): Al terminar la línea con+en lugar de\;,findpasa múltiples resultados al comandormen una sola ejecución, lo que es mucho más eficiente en términos de I/O que ejecutar unrmpor cada archivo encontrado.
Auditoría y Automatización
Un script de mantenimiento “silencioso” es peligroso. Por eso, el script redirige la salida estándar y de error (2>&1) a un archivo de log (/var/log/limpieza.log). Esto permite revisar rápidamente qué se eliminó y cuándo.
Finalmente, la ejecución se programa en el Crontab para correr en una ventana de bajo tráfico (05:00 AM):
00 05 * * * /bin/bash /usr/local/bin/borrado-cron.sh
Conclusión
Pequeñas automatizaciones como esta son las que garantizan la estabilidad a largo plazo de un servidor. Al delegar la limpieza al sistema, liberamos tiempo para tareas de arquitectura y optimización.
