Anta, jeg har omtrent 10 000 filer i en mappe. Jeg har brukt crontab hver time for å finne filer som er endret de siste 60 minuttene, og deretter behandle den.
Påkalle find -mmin -60
kl. 01:00:00
Anta at den første filen ble endret kl. 00:00:00 og lett ble funnet av «finn» kl. 01:00:00.
Anta så at den 10 000. filen også ble endret 00:00:00
men er nå klokken 01:10 : 00 og «find» jobber fremdeles hardt for å nå den 10 000. filen
Så nå, 70 minutter senere, vil «finne» returnere den 10 000 fil som ble endret kl. 00:00:00?
Svar
I GNU find
, referansetiden som brukes til å evaluere filer med -mmin
etc. er beregnet og lagret når uttrykket blir analysert , så i kraft når find
starter.
Dette betyr at alle slike tidssammenligninger bruker samme tidsreferanse for alle evaluerte filer, tidspunktet da find
analysert kommandolinjen.
Svar
Forutsatt at GNU finner, blir dette lett testet:
% 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å selv om b
ble sist endret minst 4 minutter etter at find
kjørte sleep 120
for a
, samsvarte den fremdeles.
Siden -mmin
isn «t POSIX, dette er opp til implementeringen, men jeg forventer atferden som er sett ovenfor.
Kommentarer
- FW IW, den (FreeBSD-baserte?)
find
på min Mac viser også begge filene medfind . -mmin 1 -exec sleep 120 \; -print
Svar
Prøv følgende kommando etter hverandre 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 å 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 starttiden for kommandoen med finnresultatet. det viser, find
er i stand til å søke etter filene som er endret etter starttiden for kommandoen.