Einfach genug, da Sie Linux markiert haben, haben Sie den stat
Befehl verfügbar, der die Änderungszeit einer Datei extrahiert, und der GNU date
Befehl, der die Stunde aus einer bestimmten Zeit extrahiert:
find . -type f -exec sh -c '
h=$(date -d @$(stat -c %Y "$1") +%-H); [ "$h" -ge 11 ] && [ "$h" -lt 15 ]' \
sh {} \; -ls
Wenn die Ergebnisse korrekt aussehen, dann:
find . -type f -exec sh -c '
h=$(date -d @$(stat -c %Y "$1") +%-H); [ "$h" -ge 11 ] && [ "$h" -lt 15 ]' \
sh {} \; -delete
Hier ist ein Testlauf mit dem -ls
Version:
$ touch -d 'Wed Sep 12 11:00:01 EDT 2018' 11am
$ touch -d 'Wed Sep 12 12:00:02 EDT 2018' 12pm
$ touch -d 'Wed Sep 12 15:00:03 EDT 2018' 303pm
$ find . -type f -exec sh -c 'h=$(date -d @$(stat -c %Y "$1") +%-H); [ "$h" -ge 11 ] && [ "$h" -lt 15 ]' sh {} \; -ls
1705096 0 -rw-r--r-- 1 user group 0 Sep 12 2018 ./11am
1705097 0 -rw-r--r-- 1 user group 0 Sep 12 2018 ./12pm
Dank an Kusalananda für das Schreiben der ausgezeichneten Antwort, der ich gefolgt bin, unter:Understanding the -exec option of `find`
Beachten Sie, dass wir dies nicht tun wollen die {} +
Version von find
hier, wie wir den -exec
wollen Ergebnisse pro Datei, sodass wir nur Dateien löschen, die dem Zeitbereich entsprechen.
Das eingebettete Shell-Skript besteht aus zwei Hauptteilen:Ermitteln Sie den Zeitstempel „Stunde“ der Datei und geben Sie dann basierend auf dem Bereich Erfolg oder Fehler zurück. Der erste Teil ist selbst in zwei Stücken ausgeführt. Der Variablen wird das Ergebnis der Befehlsersetzung zugewiesen; der Befehl sollte von innen nach außen gelesen werden:
$(stat -c %Y "$1")
-- diese (zweite) Befehlsersetzung ruftstat
auf auf der$1
Parameter des eingebetteten Shell-Skripts;$1
wurde vonfind
zugewiesen als einer der gefundenen Pfadnamen. Die Option %Y fürstat
Der Befehl gibt die Änderungszeit in Sekunden seit der Epoche zurück.date -d @ ... +%-H
-- dies nimmt die Sekunden-seit-der-Epoche aus der obigen Befehlsersetzung und fragtdate
um uns den Stundenanteil dieser Zeit zu geben; die@
Syntax sagtdate
dass wir Sekunden seit der Epoche als Eingabeformat angeben. Mit dem-
Option im Datumsausgabeformat teilen wir GNU date nicht mit Füllen Sie den Wert mit führenden Nullen auf. Dies verhindert spätere oktale Fehlinterpretationen.
Sobald wir den $h
haben Stundenvariable zugewiesen, verwenden wir den Bedingungsoperator [[
von bash um zu fragen, ob dieser Wert größer oder gleich 11 und auch streng kleiner als 15 ist.