2008-10-30 14 views
144

Estoy escribiendo un script bash que necesita eliminar archivos viejos.Cómo eliminar archivos anteriores a X horas

se implementa actualmente usando:

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

Esto eliminará los archivos de más de 1 día.

Sin embargo, ¿qué pasa 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?

Respuesta

222

¿Su find tiene la opción -mmin? Eso puede permitir que se prueba el número de minutos desde la última modificación:

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

O puede buscar en el uso tmpwatch a hacer el mismo trabajo. phjr también recomendó tmpreaper en los comentarios.

+5

Gracias por las respuestas a todos, -mmin es exactamente lo que necesitaba :) alguna manera me lo perdí en la página del manual. –

+2

La mina no tiene -mmin :( – xtofl

+1

tmpwatch es para usted, entonces! –

2

-mmin es por minutos.

Intenta mirar la página del manual.

man find 

para más tipos.

7

Puede hacer este truco: crear un archivo hace 1 hora y usar el argumento -newer file.

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

+2

Sí, encontré este truco n google, sin embargo -mmin es mucho más elegante. –

+1

no hay ningún interruptor de la resistencia (al menos en mi comando de búsqueda), y eso es lo que se necesitaría. -newer no ayuda. – iconoclast

+5

@Brandon: afortunadamente, existe el operador '' ... – xtofl

1

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. 
0

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

0

Esto es lo que uno puede hacer para ir en el camino @iconoclast preguntaba acerca de su comment en otra respuesta.

uso crontab para el usuario o un /etc/crontab para crear archivos /tmp/hour:

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

y luego usar esto para ejecutar su comando:

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

No hay problema. @ericaya realmente hizo la mayor parte, solo retoqué las cosas. –

+0

'*/1' por hora es redundante en su crontab. Es lo mismo que poner * en el campo de la hora. – colminator

+0

@columnator: tiene razón, he corregido mi entrada. – satyr0909

0

Si usted 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) 

así, si X significa 6 horas, entonces:

find . -mtime +0.25 -ls 

funciona porque 24 horas * 0,25 = 6 horas

1

Aquí es el enfoque que trabajó para mí (y no veo que se utilice arriba)

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

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

Cuestiones relacionadas