Eliminar archivos por edad

16

¿Hay un comando para eliminar todos los archivos en un directorio que no se han modificado en N días? Necesito limpiar algunos registros viejos.

usuario1024
fuente

Respuestas:

24

Esto eliminará todos los archivos con más de 5 días de antigüedad, también puede poner un archivo -name '*log'allí para ser más preciso y también puede especificar un maxdepthen el comando de búsqueda.

find /some/dir -type f -mtime +5 -delete

Mark McKinstry
fuente
55
Aunque los sabios administradores de sistemas realizan una ejecución en seco en -lslugar de -deleteasegurarse de que esto no elimine todo lo que querían mantener. Sí, hablando por experiencia aquí.
Shadur
2
Hablando por experiencia, también verifican su camino. o no, ya que una vez hice la / some/dir/versión. :(
Hennes
3

Con zshy (.m+n) calificadores glob : .selecciona solo archivos regulares, m+nselecciona archivos modificados hace más de n días;
por ejemplo, enumere los archivos en el directorio actual que se modificaron hace más de 9 días:

print -rl -- *(.m+9)

agregar Dpara incluir archivos de puntos:

print -rl -- *(D.m+9)

o si desea repetir (y enumerar, por ejemplo, solo los archivos que terminan en .log):

setopt extendedglob
print -rl -- **/*.log(.m+9)

reemplace print -rlcon rmsi está satisfecho con el resultado; aunque es posible que tenga que usarlo zargssi tiene muchos archivos (para evitar una lista de argumentos demasiado larga ):

autoload zargs
zargs ./**/*(.m+9) -- rm
don_crissti
fuente