Ich möchte, dass ein Linux-Befehl Dateien findet, die in den letzten n
Sekunden geändert wurden .
Gibt es ein Shell-Skript oder ein anderes Tool, das ich über die Befehlszeilenschnittstelle oder die GUI ausführen kann?
Ich möchte, dass ein Linux-Befehl Dateien findet, die in den letzten n
Sekunden geändert wurden .
Gibt es ein Shell-Skript oder ein anderes Tool, das ich über die Befehlszeilenschnittstelle oder die GUI ausführen kann?
Antworten:
Verwenden Sie den Befehl find wie folgt:
find . -name "*.txt" -mtime -60s
So finden Sie alle *.txt
Dateien, die in den letzten 60 Sekunden geändert wurden.
-mtime
. "60s" ist auch keine gültige Option in POSIX oder GNU. Das Argument für -mtime
ist eine Zahl, die die Anzahl der 24-Stunden-Zeiträume angibt, vor denen eine Datei geändert wurde.
Die Lösung mit mtime Sekundenangabe funktioniert nicht auf meinen Linux-Systemen, die find --version
== verwenden find (GNU findutils) 4.4.2
.
Ich erhalte folgenden Fehler:
mycomputer:~/new$ find . -mtime -60s
find: missing argument to `-mtime'
mycomputer:~/new$ find . -mtime -60seconds
find: missing argument to `-mtime'
Ich kann jedoch -mmin
(für geändert in den letzten m Minuten) verwenden und kann ein Dezimalargument aufnehmen; Im Folgenden werden z. B. Dateien aufgeführt, die in den letzten 30 Sekunden geändert wurden.
find . -mmin 0.5
Also zum Beispiel; Erstellen von Dateien, die zuletzt geändert wurden 1s, 6s, 11s, ... vor über 120 Sekunden, findet dieser Befehl:
mycomputer:~/new$ for i in $(seq 1 5 120); do touch -d "-$i seconds" last_modified_${i}_seconds_ago ; done
mycomputer:~/new$ find . -mmin 0.5
.
./last_modified_1_seconds_ago
./last_modified_26_seconds_ago
./last_modified_11_seconds_ago
./last_modified_16_seconds_ago
./last_modified_21_seconds_ago
./last_modified_6_seconds_ago
Wenn Sie es also wirklich in Sekunden brauchen, können Sie Folgendes tun:
localhost:~/new$ for i in $(seq 1 1 120); do touch -d "-$i seconds" last_modified_${i}_seconds_ago ; done
localhost:~/new$ N=18; find . -mmin $(echo "$N/60"|bc -l)
./last_modified_1_seconds_ago
./last_modified_9_seconds_ago
./last_modified_14_seconds_ago
./last_modified_4_seconds_ago
./last_modified_12_seconds_ago
./last_modified_13_seconds_ago
./last_modified_8_seconds_ago
./last_modified_3_seconds_ago
./last_modified_5_seconds_ago
./last_modified_11_seconds_ago
./last_modified_17_seconds_ago
./last_modified_16_seconds_ago
./last_modified_7_seconds_ago
./last_modified_15_seconds_ago
./last_modified_10_seconds_ago
./last_modified_6_seconds_ago
./last_modified_2_seconds_ago
Ähnlich wie es Glenn vorgeschlagen hat, ist es möglicherweise einfacher, Folgendes zu tun, wenn Sie alle Änderungen in der Zeit finden möchten, in der ein Installationsprozess ausgeführt wurde:
touch /tmp/checkpoint
<do installer stuff>
find / -newer /tmp/checkpoint
Dann müssen Sie keine Zeitberechnung durchführen. Sie finden nur Dinge, die nach der Checkpoint-Datei geändert wurden.
Der einfachste Weg dies zu tun ist:
find . -name "*.txt" -newermt '6 seconds ago'
Die -mtime -60s
in einer Antwort erwähnte Option funktioniert bei vielen Versionen von nicht find
, auch nicht im Jahr 2016. Für -newermt
uns ist sie eine viel bessere Option. Es können viele verschiedene Datums- und Zeitformate analysiert werden.
Eine alternative Methode mmin
ist die folgende:
find . -name "*.txt" -mmin -0.5
# Finds files modified within the last 0.5 minute, i.e. last 30 seconds
Diese Option funktioniert möglicherweise nicht bei allen find
Versionen.
Wenn Sie ein Verzeichnis auf Änderungen an Dateien überwachen, möchten Sie wahrscheinlich inotify-tools anstelle einer unendlichen Polling-Schleife verwenden.
Wenn Ihre Version von find
keine Sekunden oder realen Werte akzeptiert, wie meine, verwenden Sie -mmin
, aber geben Sie 0 an, und alle Dateien werden in weniger als einer Minute geändert:
$ touch test; find . -type f -mmin 0
./test
find: missing argument to `-mtime'
. Ich kann jedoch das gewünschte Verhalten mit -mmin und einem Dezimalargument erhalten. Ich konnte in der Manpage keine Referenz für find finden, dies
als Argument verwendet werden könnte.