Antag, jeg har cirka 10.000 filer i en mappe. Jeg har brugt crontab hver time til at finde filer, der er ændret i de sidste 60 minutter, så behandle det.
Påkald find -mmin -60
kl. 01:00:00
Antag, at den første fil blev ændret kl. 00:00:00 og let blev fundet af “find” kl. 01:00:00.
Antag derefter, at den 10.000. fil også blev ændret kl. 00:00:00
men er nu kl. 01:10 : 00 og “find” arbejder stadig hårdt på at nå den 10.000. fil
Så nu, 70 minutter senere, vil “find” returnere den 10.000. fil, der blev ændret kl. 00:00:00?
Svar
I GNU find
, den referencetid, der bruges til at evaluere filer med -mmin
osv. er beregnet og gemt, når udtrykket parses , så i virkeligheden når find
starter.
Dette betyder, at alle sådanne tidssammenligninger bruger den samme tidsreference for alle evaluerede filer, det tidspunkt, hvor find
analyseret kommandolinjen.
Svar
Under forudsætning af, at GNU finder, testes dette let:
% 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å selvom b
sidst blev ændret mindst 4 minutter efter find
løb sleep 120
for a
matchede den stadig.
Da -mmin
isn “t POSIX, dette er op til implementeringen, men jeg forventer den adfærd, der er set ovenfor.
Kommentarer
- FW IW, den (FreeBSD-baserede?)
find
på min Mac viser også begge filer medfind . -mmin 1 -exec sleep 120 \; -print
Svar
Prøv følgende kommando efter hinanden i to 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 er i stand til at få resultatet som
Wed Jul 17 11:48:33 IST 2019 Wed 17 Jul 2019 11:48:34 AM IST /path/to/some/file
Jeg står foran starttidspunktet for kommandoen med find-resultatet. det viser, find
er i stand til at søge efter de filer, der er ændret efter starttidspunktet for kommandoen.