Antag att jag har ungefär 10 000 filer i en mapp. Jag har använt crontab varje timme för att hitta filer som har ändrats under de senaste 60 minuterna och sedan bearbeta det.

Åkalla find -mmin -60 kl 01:00:00

Antag att den första filen ändrades kl 00:00:00 och hittades lätt av ”hitta” kl 01:00:00.

Antag sedan att den 10 000: e filen också ändrades kl 00:00:00

men är nu kl 01:10 : 00 och ”find” arbetar fortfarande hårt för att nå den 10 000: e filen

Så nu, efter 70 minuter, kommer ”hitta” att returnera den 10 000: e fil som ändrades 00:00:00?

Svar

I GNU find, referenstiden som används för att utvärdera filer med -mmin etc. är beräknas och lagras när uttrycket tolkas , så i själva verket när find startar.

Detta betyder att alla sådana jämförelser använder samma tidsreferens för alla utvärderade filer, den tid då find tolkade kommandoraden.

Svar

Förutsatt att GNU-sökning är det lätt att testa:

% 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 % 

Så även om b senast ändrades minst 4 minuter efter att find sprang sleep 120 för a matchade det fortfarande.


Eftersom -mmin isn ”t POSIX, det här är upp till implementeringen, men jag förväntar mig beteendet ovan.

Kommentarer

  • FW IW, (FreeBSD-baserad?) find på min Mac visar också båda filerna med find . -mmin 1 -exec sleep 120 \; -print

Svar

Försök med följande kommando efter varandra i två terminaler

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 

vi kan få resultatet som

Wed Jul 17 11:48:33 IST 2019 Wed 17 Jul 2019 11:48:34 AM IST /path/to/some/file 

Jag prefixerar starttiden för kommandot med sökresultat. det visar att find kan söka efter filerna som ändras efter kommandot starttid.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *