Trabajo cron para eliminar archivos de más de 3 días

Trabajo cron para eliminar archivos de más de 3 días

Necesito eliminar archivos de más de 3 días con una tarea cron en 3 directorios diferentes. (estos 3 directorios son hijos de un directorio principal /a/b/c/1& /a/b/c/2& /a/b/c/3) ¿Se puede hacer esto con una línea en el crontab?

Respuesta1

Esto es bastante fácil (aunque tenga en cuenta que esto ocurre con un tiempo de modificación de hace más de 3 días, ya que el tiempo de creación solo está disponible en ciertos sistemas de archivos con herramientas especiales):

find /a/b/c/1 /a/b/c/2 -type f -mtime +3 #-delete

Elimine el #anterior -deleteuna vez que esté seguro de que está encontrando los archivos que desea eliminar.

Para que se ejecute mediante cron, probablemente simplemente crearía un script ejecutable (agregaría un shebang - #!bin/sha la línea superior del archivo y lo haría ejecutable con chmod a+x), luego lo colocaría en un crondirectorio apropiado como /etc/cron.dailyo /etc/cron.weekly. Siempre que, por supuesto, no necesites un horario más específico y que estos directorios existan en tu distribución.

Actualizar

Como se indica a continuación, la -deleteopción findno es muy portátil. Un enfoque compatible con POSIX sería:

find /a/b/c/1 /a/b/c/2 -type f -mtime +3 #-exec rm {} +

Vuelva a eliminar el archivo #cuando esté seguro de tener los archivos correctos.

Actualización2

Para citar deEl comentario de Stéphane Chazelaabajo:

Tenga en cuenta que -exec rm {} +tiene vulnerabilidades de condición de carrera que -delete(cuando estén disponibles) no las tiene. Por lo tanto, no lo use en directorios en los que otros puedan escribir. Algunos hallazgos también tienen una -execdirsolución que mitiga esas vulnerabilidades.

Respuesta2

Sería mucho mejor que usarastmpwatch

tmpwatch recursively removes files which haven't been accessed for a given time. Normally, it's used to clean up directories which are used for temporary holding space such as /tmp.

información relacionada