Stel dat ik ongeveer 10.000 bestanden in een map heb. Ik heb crontab per uur gebruikt om bestanden te vinden die in de afgelopen 60 minuten zijn gewijzigd en vervolgens te verwerken.

Roep find -mmin -60 aan om 01:00:00

Veronderstel dat het eerste bestand om 00:00:00 is gewijzigd en gemakkelijk kan worden gevonden door “find” om 01:00:00.

Stel dan dat het 10.000ste bestand ook om 00:00:00 is gewijzigd.

maar is nu om 01:10 : 00 en “find” werkt nog steeds hard om het 10.000ste bestand te bereiken

Dus nu, 70 minuten later, zal “find” het 10.000ste teruggeven bestand dat is gewijzigd om 00:00:00?

Antwoord

In GNU find, de referentietijd die wordt gebruikt om te evalueren bestanden met -mmin etc. worden berekend en opgeslagen wanneer de expressie wordt geparseerd , dus in feite wanneer find start.

Dit betekent dat al dergelijke tijdvergelijkingen dezelfde tijdreferentie gebruiken voor alle geëvalueerde bestanden, het tijdstip waarop find heeft de opdrachtregel geparseerd.

Answer

Ervan uitgaande dat GNU-zoekopdracht is gevonden, is dit eenvoudig te testen:

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

Dus ook al is b voor het laatst gewijzigd ten minste 4 minuten nadat find sleep 120 voor a komt het nog steeds overeen.


Sinds -mmin isn “t POSIX, dit is aan de implementatie, maar ik” zou het bovenstaande gedrag verwachten.

Reacties

  • FW IW, de (op FreeBSD gebaseerde?) find op mijn Mac toont ook beide bestanden met find . -mmin 1 -exec sleep 120 \; -print

Answer

Probeer het volgende commando een voor een in twee terminals

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 

we kunnen het resultaat krijgen als

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

Ik geef de starttijd van het commando een voorvoegsel met het resultaat find. het laat zien dat find in staat is om te zoeken naar de bestanden die zijn gewijzigd na de starttijd van het commando.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *