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
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.
find
op mijn Mac toont ook beide bestanden metfind . -mmin 1 -exec sleep 120 \; -print