Dateien finden mit dem Befehl: find

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.

comments powered by Disqus