Estoy escribiendo un script bash que necesita eliminar archivos antiguos.
Actualmente se implementa usando:
find $LOCATION -name $REQUIRED_FILES -type f -mtime +1 -delete
Esto eliminará los archivos anteriores a 1 día.
Sin embargo, ¿qué pasa si necesito una resolución más fina que 1 día, digamos como 6 horas? ¿Hay una manera agradable y limpia de hacerlo, como si se usa find y -mtime?
$LOCATION
y$REQUIRED_FILES
ambos pueden tener múltiples valores comodir1 dir2
e*.txt *.tmp
?Podrías hacer este truco: crear un archivo hace 1 hora y usar el
-newer file
argumento.(O úselo
touch -t
para crear dicho archivo).fuente
touch -t $(date -d '-1 hour' +%Y%m%d%H%M.00) test
Crea un archivotest
que siempre tiene 1 hora de antigüedad.Aquí está el enfoque que funcionó para mí (y no veo que se use anteriormente)
eliminar todos los archivos anteriores a 59 minutos y dejar las carpetas intactas.
fuente
'*.*'
o el shell lo expandirá a nombres de archivo reales en lugar de mantenerlo como un comodín parafind
resolver. Esto interrumpefind
la operación recursiva en subdirecciones.-name '*.*'
no va a borrar archivos que no tienen una extensión, tales comoREADME
,Makefile
, etc.Para SunOS 5.10
fuente
-mmin es por minutos.
Intenta mirar la página del manual.
para más tipos
fuente
Si no tiene "-mmin" en su versión de "find", entonces "-mtime -0.041667" se acerca bastante a "en la última hora", por lo tanto, en su caso, use:
entonces, si X significa 6 horas, entonces:
funciona porque 24 horas * 0.25 = 6 horas
fuente
Esto es lo que se puede hacer para seguir el camino que @iconoclast se preguntaba en su comentario sobre otra respuesta.
use crontab para el usuario o an
/etc/crontab
para crear el archivo/tmp/hour
:y luego usa esto para ejecutar tu comando:
fuente
*/1
por hora es redundante en su crontab. Es lo mismo que poner * en el campo de la hora.find $PATH -name $log_prefix"*"$log_ext -mmin +$num_mins -exec rm -f {} \;
fuente
Si uno
find
no tiene-mmin
y si uno también está atascado con unfind
que acepta solo valores enteros para-mtime
, entonces no todo se pierde necesariamente si uno considera que "más antiguo que" es similar a "no más nuevo que".Si pudiéramos crear un archivo que tiene un tiempo m de nuestro tiempo de corte, podemos solicitar
find
localizar los archivos que "no son más nuevos que" nuestro archivo de referencia.Para crear un archivo que tiene la marca de hora correcta es un poco involucrados debido a que un sistema que no tenga una adecuada
find
probablemente también tiene una menor a la capacidaddate
de comando que podría hacer cosas como:date +%Y%m%d%H%M%S -d "6 hours ago"
.Afortunadamente, otras herramientas antiguas que pueden manejar esto, aunque de una manera más difícil de manejar.
Considere que seis horas son 21600 segundos. Queremos encontrar el tiempo que hace seis horas en un formato que sea útil:
La declaración perl produjo una fecha útil, pero debe utilizarse mejor:
Ahora la solución para este antiguo UNIX es algo similar a:
También podría ser una buena idea limpiar nuestro archivo de referencia ...
fuente