Cómo eliminar archivos anteriores a X horas

Estoy escribiendo un script bash que necesita borrar archivos viejos.

Actualmente se implementa utilizando:

find $LOCATION -name $REQUIRED_FILES -type f -mtime +1 -delete 

Esto eliminará los archivos anteriores a 1 día.

Sin embargo, ¿qué sucede si necesito una resolución más fina que 1 día, digamos que 6 horas? ¿Hay alguna manera limpia de hacerlo, como usar find y -mtime?

¿Tu find tiene la opción -mmin ? Eso puede permitirle probar la cantidad de minutos desde la última modificación:

 find $LOCATION -name $REQUIRED_FILES -type f -mmin +360 -delete 

O tal vez mirar usando tmpwatch para hacer el mismo trabajo. phjr también recomendó tmpreaper en los comentarios.

Podrías recurrir a este truco: crear un archivo hace 1 hora y usar el argumento -newer file .

(O use touch -t para crear dicho archivo).

Para SunOS 5.10

  Example 6 Selecting a File Using 24-hour Mode The descriptions of -atime, -ctime, and -mtime use the ter- minology n ``24-hour periods''. For example, a file accessed at 23:59 is selected by: example% find . -atime -1 -print at 00:01 the next day (less than 24 hours later, not more than one day ago). The midnight boundary between days has no effect on the 24-hour calculation. 

Este es el enfoque que funcionó para mí (y no creo que se use antes)

 $ find /path/to/the/folder -name *.* -mmin +59 -delete > /dev/null 

borrando todos los archivos de más de 59 minutos dejando las carpetas intactas.

-minutos es por minutos.

Intenta mirar la página de manual.

 man find 

para más tipos.

Si no tiene “-mmin” en su versión de “buscar”, entonces “-mtime -0.041667” se acerca bastante a “dentro de la última hora”, por lo que en su caso, use:

 -mtime +(X * 0.041667) 

Entonces, si X significa 6 horas, entonces:

 find . -mtime +0.25 -ls 

funciona porque 24 horas * 0.25 = 6 horas

Esto es lo que se puede hacer para seguir el camino que se le ocurrió a @iconoclast en su comentario sobre otra respuesta.

use crontab para el usuario o un /etc/crontab para crear el archivo /tmp/hour :

 # mh dom mon dow user command 0 * * * * root /usr/bin/touch /tmp/hour > /dev/null 2>&1 

y luego usa esto para ejecutar tu comando:

 find /tmp/ -daystart -maxdepth 1 -not -newer /tmp/hour -type f -name "for_one_hour_files*" -exec do_something {} \; 

find $PATH -name $log_prefix"*"$log_ext -mmin +$num_mins -exec rm -f {} \;