Oletetaan, että kansiossa on noin 10000 tiedostoa. Olen käyttänyt tuntikohtaista hakemistoa hakeaksesi tiedostoja, joita on muokattu viimeisten 60 minuutin aikana, ja käsittelen ne sitten.
Kutsu find -mmin -60
klo 01:00:00
Oletetaan, että ensimmäistä tiedostoa muokattiin klo 00:00:00 ja ”find” löysi sen helposti klo 01:00:00.
Oletetaan sitten, että 10 000. tiedostoa muokattiin myös klo 00:00:00.
mutta on nyt 01:10 : 00 ja ”find” tekee edelleen kovasti töitä saavuttaakseen 10 000. tiedoston
Joten nyt, 70 minuuttia myöhemmin, ”etsi” palauttaa 10000: n tiedosto, jota muokattiin klo 00:00:00?
vastaus
GNU: ssa find
viiteaika, jota käytetään arvioinnissa -mmin
jne. tiedostot lasketaan ja tallennetaan, kun lauseke on jäsennetty , joten voimassa, kun find
alkaa.
Tämä tarkoittaa, että kaikki tällaiset aikavertailut käyttävät samaa aikaviitettä kaikille arvioiduille tiedostoille, jolloin find
jäsennti komentorivinsä.
Vastaa
Olettaen GNU-löydöksen, tämä on helppo testata:
% 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 %
Joten vaikka b
muokattiin viimeksi vähintään 4 minuuttia sen jälkeen, kun find
juoksi sleep 120
kohteelle a
, se sopi edelleen.
Koska -mmin
ei ole ”t POSIX, tämä riippuu toteutuksesta, mutta odotan yllä kuvattua käyttäytymistä.
Kommentit
- FW IW, (FreeBSD-pohjainen?)
find
Macissa näyttää myös molemmat tiedostotfind . -mmin 1 -exec sleep 120 \; -print
vastaus
Kokeile seuraavaa komentoa peräkkäin kahdessa päätteessä
Terminaali 1:
find /path -mmin -0.017 -printf "$(date) %Tc %p\n" | grep "/path/to/some/file"
Terminaali 2:
touch -d " 0 seconds ago" /path/to/some/file
voimme saada tuloksen muodossa
Wed Jul 17 11:48:33 IST 2019 Wed 17 Jul 2019 11:48:34 AM IST /path/to/some/file
Etuliitän komennon aloitusajan hakutuloksella. se osoittaa, että find
pystyy etsimään tiedostoja, joita on muokattu komennon alkamisajan jälkeen.