Angenommen, ich habe ungefähr 10.000 Dateien in einem Ordner. Ich habe stündlich crontab verwendet, um Dateien zu finden, die in den letzten 60 Minuten geändert wurden, und sie dann verarbeitet.

Rufen Sie find -mmin -60 um 01:00:00

Angenommen, die erste Datei wurde um 00:00:00 Uhr geändert und durch „find“ um 01:00:00 Uhr leicht gefunden.

Nehmen wir dann an, dass die 10.000ste Datei ebenfalls um 00:00:00 Uhr geändert wurde

, aber ist jetzt um 01:10 Uhr : 00 und „find“ arbeiten immer noch hart daran, die 10.000ste Datei zu erreichen.

Jetzt, 70 Minuten später, wird „find“ die 10.000ste zurückgeben Datei, die um 00:00:00 geändert wurde?

Antwort

In GNU find die Referenzzeit, die zur Auswertung verwendet wird Dateien mit -mmin usw. werden berechnet und gespeichert, wenn der Ausdruck analysiert wird , also tatsächlich, wenn find wird gestartet.

Dies bedeutet, dass alle derartigen Zeitvergleiche für alle ausgewerteten Dateien dieselbe Zeitreferenz verwenden, zu der find hat die Befehlszeile analysiert.

Antwort

Unter der Annahme, dass GNU gefunden wird, ist dies leicht zu 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 % 

Obwohl b zuletzt mindestens 4 Minuten nach dem Ausführen von find sleep 120 für a stimmte immer noch überein.


Da -mmin isn „t POSIX, dies hängt von der Implementierung ab, aber ich würde das oben gezeigte Verhalten erwarten.

Kommentare

  • FW IW, das (FreeBSD-basierte?) find auf meinem Mac zeigt auch beide Dateien mit find . -mmin 1 -exec sleep 120 \; -print

Antwort

Versuchen Sie den folgenden Befehl nacheinander in zwei 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 

Wir können das Ergebnis als

Ich stelle der Startzeit des Befehls das Suchergebnis voran. Es zeigt, dass find nach Dateien suchen kann, die nach der Startzeit des Befehls geändert wurden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.