Supongamos que tengo unos 10.000 archivos en una carpeta. He estado usando crontab por horas para encontrar archivos que se modifican en los últimos 60 minutos y luego procesarlos.
Invoque find -mmin -60
a las 01:00:00
Suponga que el primer archivo se modificó a las 00:00:00 y se encontró fácilmente mediante «buscar» a las 01:00:00.
Entonces, suponga que el archivo número 10.000 también se modificó a las 00:00:00
pero ahora está a las 01:10 : 00 y «find» todavía está trabajando duro para alcanzar el archivo número 10,000
Así que ahora, 70 minutos después, «find» devolverá el archivo 10,000. archivo que fue modificado a las 00:00:00?
Respuesta
En GNU find
, el tiempo de referencia que se usa para evaluar Los archivos con -mmin
etc.se se calcula y se almacena cuando se analiza la expresión , por lo que en efecto cuando find
comienza.
Esto significa que todas estas comparaciones de tiempo utilizan la misma referencia de tiempo para todos los archivos evaluados, la hora a la que find
analizó su línea de comando.
Respuesta
Suponiendo que GNU encuentre, esto se prueba fácilmente:
% mkdir foo; cd foo; touch a b % find -mmin 1 . ./a ./b % find -mmin 1 -exec sleep 120 \; -print . # 2 minutes wait before this showed up ./a # another 2 minutes before this showed up ./b # and another 2 minutes for this one % find -mmin 1 %
Entonces, aunque b
se modificó por última vez al menos 4 minutos después de que find
ejecutara sleep 120
para a
, todavía coincide.
Dado que -mmin
isn «t POSIX, esto depende de la implementación, pero esperaría el comportamiento visto arriba.
Comentarios
- FW IW, el (¿basado en FreeBSD?)
find
en mi Mac también muestra ambos archivos confind . -mmin 1 -exec sleep 120 \; -print
Responder
Pruebe el siguiente comando uno tras otro en dos terminales
Terminal 1:
find /path -mmin -0.017 -printf "$(date) %Tc %p\n" | grep "/path/to/some/file"
Terminal 2:
touch -d " 0 seconds ago" /path/to/some/file
podemos obtener el resultado como
Wed Jul 17 11:48:33 IST 2019 Wed 17 Jul 2019 11:48:34 AM IST /path/to/some/file
Estoy prefijando la hora de inicio del comando con el resultado de búsqueda. muestra, find
puede buscar los archivos que se modifican después de la hora de inicio del comando.