La respuesta corta es find /var/log/app -type f -mtime +30 -delete. La larga: ejecútalo primero sin -delete, porque la versión que sale mal se lleva el directorio entero. Este es el orden seguro, dicho como lo dirías en voz alta.
1. Primero muéstrame qué se borraría
$ clai muestra los archivos de /var/log/app con más de 30 días, no borres nada→ find /var/log/app -type f -mtime +30 -printf '%TY-%Tm-%Td %p\n'2026-06-01 /var/log/app/app-june.log2026-07-10 /var/log/app/app-july.log
find sin una acción solo imprime. Lee la lista antes de confiar en ella: este es el paso que todo el mundo se salta.
2. Cuánto espacio liberaría de verdad
$ clai cuánto espacio liberarían esos archivos antiguos→ find /var/log/app -type f -mtime +30 -printf '%s\n' | awk '{s+=$1} END {printf "%.1f KB in %d files\n", s/1024, NR}'6.0 KB in 2 files
Si la respuesta son unos kilobytes, tu problema de disco no está aquí y puedes parar.
3. Ahora bórralos
$ clai borra esos archivos de más de 30 días→ find /var/log/app -type f -mtime +30 -delete
-delete no imprime nada si tiene éxito. Ese silencio es normal.
4. Solo .log y solo el primer nivel
$ clai borra solo los .log de más de 30 días en /var/log/app, sin entrar en subcarpetas→ find /var/log/app -maxdepth 1 -type f -name '*.log' -mtime +30 -delete
-maxdepth 1 es lo que impide que una tarea de limpieza se meta en un volumen montado.
5. Por fecha de calendario, no por «hace N días»
$ clai busca archivos modificados antes del 1 de julio de 2026→ find /var/log/app -type f ! -newermt '2026-07-01' -printf '%TY-%Tm-%Td %p\n'2026-05-01 /var/log/app/old.txt2026-06-01 /var/log/app/app-june.log
Útil cuando el corte es una fecha de release y no una ventana deslizante.
6. Limpiar los directorios vacíos que quedan
$ clai elimina las carpetas vacías que quedaron en /var/log/app→ find /var/log/app -mindepth 1 -type d -empty -delete
-mindepth 1 evita que find borre el propio directorio que le indicaste.
Trampas
-deleteva al final.findevalúa la expresión de izquierda a derecha, así quefind . -delete -mtime +30borra todo antes de comprobar la antigüedad. Es la errata más cara de este artículo.-mtime +30significa 31 días como mínimo.findtrunca a periodos completos de 24 horas y+30es estrictamente mayor que 30, así que un archivo de 30,5 días no coincide.- No uses
-atime. La mayoría de sistemas montan conrelatime, y la hora de acceso se actualiza como mucho una vez al día. Usa la hora de modificación (-mtime) o de cambio (-ctime).
Preguntas relacionadas
¿Por qué find -delete borró más de lo esperado? Casi siempre por el orden de los flags: mira la primera trampa. Además -delete implica -depth, lo que cambia el recorrido del árbol.
¿Cómo lo ejecuto cada noche? Pon el comando ya probado en cron con rutas absolutas: 0 3 * * * find /var/log/app -type f -mtime +30 -delete. Pruébalo a mano primero: cron tiene otro entorno y mucho menos público para tus errores.
¿Funciona en macOS? Sí, el find de BSD admite -mtime, -delete y -maxdepth. -printf es solo de GNU: en macOS usa -print.
Ver también
- Cron sin quebraderos de cabeza: «cada lunes a las 3 AM» → horario real
- Deja de memorizar los flags de find: pide lo que necesitas
- Barre logs y backups antiguos con una frase
¿No estás seguro de que un comando sea seguro? CliAI etiqueta cada comando como SAFE, CAUTION o DANGER antes de ejecutarlo, y los destructivos exigen confirmación escrita. Instálalo en una línea.