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 med find . -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.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *