24.04.2021
Wie finde ich die neuesten Dateien unter Linux? Ein Programm schreibt jedem Menge Logdateien mit cryptischen Dateinamen. Wie findet man die letzte Logdatei? Wie finde ich die letzten Dateien in meinem Browser-Cache?
ls -ltr
Der ls-Befehl kann Dateien nach dem (Modifikations-) Datum (time) sortieren (Option -t). Die Option -r /reverse) dreht das Ergebnis einfach um.
Mit
ls -ltr
werden einfach alle Dateien in einem Verzeichnis umgekehrt nach der Zeit sortiert. Die neuesten (und wichtigsten) Dateien stehen dann am Ende des Listings. Wenn das Verzeichnis viele Dateien enthält, lässt man das Listing einfach an sich vorbeirauschen, die wichtigsten Dateien stehen unten.
Analog findet
ls -lSr
Übrigens die größten Dateien (-S: sort by size).
Nur die letzte Datei finden
Die neueste Datei findet man z.B. in shell-Skripten zusammen mit tail. Die -l (long) Option stört an dieser Stelle und macht es nur kompliziert.
last=`ls -tr | tail -1` if [ -z "$last" ]
then
echo "keine Datei gefunden"
else
echo "letzte Datei: $last" fi
Suchen in Unterverzeichnissen
Bei der Suche in Unterverzeichnissen helfen find und xargs. Firefox organisiert seinen Cache in Unterverzeichnissen. Welches ist die zuletzt heruntergeladene Datei?
cd ~/.mozilla/firefox/\*/Cache
# In das Cache Verzeichnis wechseln
find . -type d | xargs
ls -ltrd
# nur neueste Verzeichnisse suchen # (ls -d: Verzeichnisinhalt nicht anzeigen)
find . -type f | xargs ls -ltr # neueste Dateien finden ...
-rw------- 1 nie nie 16870 2011-04-15 20:35 ./2/6B/198B8d01
-rw------- 1 nie nie 104418 2011-04-15 23:29 ./B/A5/8802Ad01
-rw------- 1 nie nie 59192 2011-04-16 00:00 ./C/2D/B97F3d01
-rw------- 1 nie nie 696680 2011-04-16 07:42 ./\_CACHE\_002\_
-rw------- 1 nie nie 525620 2011-04-16 07:42 ./\_CACHE\_001\_
-rw------- 1 nie nie 1934349 2011-04-16 07:42 ./\_CACHE\_003\_
find . -type f
sucht nur nach Dateien (f), nicht nach Verzeichnissen (-type d).
Vorsicht: Wenn viele Dateien an xargs übergeben werden, ruft das Programm ls mehrfach auf (Beschränkung der Kommandozeile) und das Ergebnis ist nicht 100% korrekt.
In den meisten Fällen kann man sich aber schnell einen Überblick verschaffen.
Neueste Dateien mit find
find hat auch einige nützliche Optionen zum Auffinden der neuesten Dateien. find -mtime, -atime, -ctime
find . -mtime -5 -type f
Findet alle Dateien, die innerhalb der letzten 5 Tage geändert wurden. Neben der modificationtime (-mtime) kann auch noch die acesstime (-atime) und die changetime (-ctime) verwendet werden. mtime bezieht sich auf den Inhalt der Datei (Wann wurde der Dateinhalt geändert?). ctime bezieht sich auf den inode (“Verzeichniseintrag”) und nicht direkt auf den Inhalt. Die ctime wird z.B. bei einem chown (change owner) oder chmod geändert. Anzeigen lässt sich die ctime mit “ls -lc“.
Mit -mtime +5 findet man alle Dateien und Verzeichnisse, die älter als 5 Tage sind.
# Dateien und Verz. älter als 5 Tage im Archiv löschen # in einer ( subshell ) ( cd ~/archiv && find . -mtime +5 | xargs rm -rf )
Das funktioniert dank xargs auch, wenn sehr viele Dateien zu löschen sind.
find -newer
Welche Dateien schreibt das Programm xyz? Welche Dateien werden bei der Installation eines Programmes angelegt? Was habe ich alles geändert?
Die Antwort auf diese Fragen bekommt man sehr schnell, wenn man vorher eine Zeitstempel-Datei als Referenz angelegt hat.
touch /tmp/my-timestamp
welche Dateien / Verzeichnisse wurden geändert?
find . -newer /tmp/my-timestamp | tee /tmp/newer.lst
vi /tmp/newer.lst # Inhalt kontrollieren
tar czf /tmp/newer.tgz \`cat /tmp/newer.lst\` # Pack & Go
Vorsicht Der Inhalt des Listings sollte man unbedingt vor dem Einpacken kontrollieren, weil eventuell Devices (/dev/…) oder von anderen Benutzern geänderte Dateien mit enthalten sind, die nicht in so ein Archiv gehören.
Windows
Unter Windows kann der dir-Befehl übrigens auch nach dem Datum sortieren.
- O Gibt die Liste sortiert aus.
- Folge N Name (alphabetisch) S Größe (kleinere zuerst)
- E Erweiterung (alphabetisch)
- D Datum/Zeit (ältere zuerst)
- G Verzeichnisse zuerst - vorangestellt kehrt die Reihenfolge um
- dir /OD # sortiert nach der Zeit (ältere zuerst)
Der Windows find-Befehl arbeitet komplett anders (eher wie das Unix-grep) und kann nicht wie oben beschrieben verwendet werden.