shell bash

Dateien mit Datum und Uhrzeit in einem bestimmten Bereich mit Bash ausgeben

In der Bash-Programmiersprache (Skriptsprache) Befehlszeile auf Linux PC/Server stellt dieser Artikel vor, wie man einen Befehl implementiert, um Dateien auszugeben, deren Änderungsdatum und -zeit innerhalb eines bestimmten Datums-/Zeitbereichs liegen. Unten ist ein Beispiel, das 10 Dateien in der Reihenfolge des neuesten Änderungsdatums ausgibt. Wenn Sie nur Dateien ausgeben möchten, deren Änderungsdatum/-zeit zwischen 4:00 und 6:00 Uhr am heutigen 7. Juli liegt.

Shou Arisaka
2 Min. Lesezeit
15. Okt. 2025

In der Bash-Programmiersprache (Skriptsprache) Befehlszeile auf Linux PC/Server stellt dieser Artikel vor, wie man einen Befehl implementiert, um Dateien auszugeben, deren Änderungsdatum und -zeit innerhalb eines bestimmten Datums-/Zeitbereichs liegen.

Unten ist ein Beispiel, das 10 Dateien in der Reihenfolge des neuesten Änderungsdatums ausgibt.

find . -type f -printf '%Ts\t%p\n' | sort -n -r | sed -Ee 's/^.*\t//g' | head

./ShareX_ScreenShot_e55d3fd6-ba65-4230-98fe-fcea0dde5142.png
./ShareX_ScreenShot_926e9d7f-6f7e-4146-a656-aae6fcbbfe66.png
./ShareX_ScreenShot_46de4c81-9393-4472-9763-bbad1f4dc4ed.png
./ShareX_ScreenShot_6b0a27fe-9f3b-4429-a377-fd9a0877263c.gif
./ShareX_ScreenShot_2baf49f9-7742-4931-889e-3489db8f675b.png
...

Wenn Sie nur Dateien ausgeben möchten, deren Änderungsdatum/-zeit zwischen 4:00 und 6:00 Uhr am heutigen 7. Juli liegt.

find . -type f -printf '%Ts\t%p\n' | sort -n -r | awk -F '\t' '$1 >= 1562439600 && $1 <= 1562446800{print $0}' | sed -Ee 's/^.*\t//g'

Dies kann wie folgt gemacht werden:

find . -type f -printf '%Ts\t%p\n' | sort -n -r | awk -v from="1562439600" -v to="1562446800" -F '\t' '$1 >= from && $1 <= to{print $0}' | sed -Ee 's/^.*\t//g'

Für die praktische Verwendung wird es zu einem Format wie folgt:

find . -type f -printf '%Ts\t%p\n' | sort -n -r | awk -v from="$( date --date "7/7 4:00" +%s )" -v to="$( date --date "7/7 6:00" +%s )" -F '\t' '$1 >= from && $1 <= to{print $0}' | sed -Ee 's/^.*\t//g'

Bei Verwendung als Funktion ist es so etwas wie das:


getlastsByDate(){

    : getlastsByDate [from] [to] [dir]

    find ${3:-.} -type f -printf '%Ts\t%p\n' | sort -n -r | awk -v from="$( date --date "${1:-0:00}" +%s )" -v to="$( date --date "${2:-23:59}" +%s )" -F '\t' '$1 >= from && $1 <= to{print $0}' | sed -Ee 's/^.*\t//g'

}

Praktisches Beispiel

Zum Beispiel ein Ordner mit drei Dateien vom 28. Juni, wie unten gezeigt, wo Sie Dateien vom 1. Juni bis Ende des Monats löschen möchten.

yuis ASUS /mnt/c/_tmp/20190627124456$ ls
total 8
166351711236005864 drwxrwxrwx 1 yuis yuis 4096 Jul  7 05:52 ..
285134151409284381 drwxrwxrwx 1 yuis yuis 4096 Jun 28 19:41 .
144959613006035510 -rwxrwxrwx 1 yuis yuis    0 Jun 28 19:41 tmp.html is DszR7hzC5AUm9ZG6OMcmjsT9CpBvwyGm.html.is.tag
118500965195223995 -rwxrwxrwx 1 yuis yuis 3675 Jun 28 19:41 tmp.html
 15762598696119839 -rwxrwxrwx 1 yuis yuis 3675 Jun 28 19:40 DszR7hzC5AUm9ZG6OMcmjsT9CpBvwyGm.html

Image

Sie können Dateien im angegebenen Zeitraum mit Folgendem erhalten:

yuis ASUS /mnt/c/_tmp/20190627124456$ getlastsByDate 6/1 7/1 .
./tmp.html is DszR7hzC5AUm9ZG6OMcmjsT9CpBvwyGm.html.is.tag
./tmp.html
./DszR7hzC5AUm9ZG6OMcmjsT9CpBvwyGm.html

Und sie löschen.

rm "$( getlastsByDate 6/1 7/1 . )"

Diesen Artikel teilen

Shou Arisaka 15. Okt. 2025

🔗 Links kopieren