CLI AI

Borrar archivos de más de 30 días en Linux, con seguridad

2026-05-01

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
$ 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
$ 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
$ 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
$ 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
$ 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
$ 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

  • -delete va al final. find evalúa la expresión de izquierda a derecha, así que find . -delete -mtime +30 borra todo antes de comprobar la antigüedad. Es la errata más cara de este artículo.
  • -mtime +30 significa 31 días como mínimo. find trunca a periodos completos de 24 horas y +30 es estrictamente mayor que 30, así que un archivo de 30,5 días no coincide.
  • No uses -atime. La mayoría de sistemas montan con relatime, 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

¿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.