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 ruftstatauf auf der$1Parameter des eingebetteten Shell-Skripts;$1wurde vonfindzugewiesen als einer der gefundenen Pfadnamen. Die Option %Y fürstatDer 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 fragtdateum uns den Stundenanteil dieser Zeit zu geben; die@Syntax sagtdatedass 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.