
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 -delete
una 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/sh
a la línea superior del archivo y lo haría ejecutable con chmod a+x
), luego lo colocaría en un cron
directorio apropiado como /etc/cron.daily
o /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 -delete
opción find
no 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-execdir
solució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.