bash - temporales - script para borrar archivos de una carpeta linux
Cómo eliminar archivos anteriores a X horas (8)
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?
-minutos es por minutos.
Intenta mirar la página de manual.
man find
para más tipos.
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.
Esto es lo que se puede hacer para seguir el camino que se le ocurrió a @iconoclast en su comment sobre otra respuesta.
use crontab para el usuario o un /etc/crontab
para crear el archivo /tmp/hour
:
# m h 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 {} /;
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.
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).
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
find $PATH -name $log_prefix"*"$log_ext -mmin +$num_mins -exec rm -f {} /;