Zum Inhalt springen

find – nach Dateien suchen

find durchsucht den Verzeichnisbaum nach Dateien und Verzeichnissen, die bestimmte Kriterien erfüllen. Im Gegensatz zu Globs durchsucht find auch Unterverzeichnisse und kann nach Metadaten wie Größe, Datum oder Typ filtern.

Terminal-Fenster
find startpfad [kriterien] [aktionen]
Terminal-Fenster
find /home -name "*.txt" # alle .txt-Dateien unter /home
find . -name "config.yml" # im aktuellen Verzeichnis (und darunter)
find / -name "sshd_config" # auf dem gesamten System
Terminal-Fenster
find . -name "*.log" # Groß-/Kleinschreibung beachten
find . -iname "*.jpg" # -iname: Groß-/Kleinschreibung ignorieren
find . -type f # nur reguläre Dateien
find . -type d # nur Verzeichnisse
find . -type l # nur symbolische Links
find . -type f -name "*.sh" # nur Dateien mit .sh-Endung
find . -type d -name "cache" # nur Verzeichnisse namens "cache"
Terminal-Fenster
find . -size +100M # größer als 100 MB
find . -size -10k # kleiner als 10 KB
find . -size +1M -size -500M # zwischen 1 MB und 500 MB
find /var/log -size +50M -type f # große Log-Dateien

Einheiten: c (Bytes), k (KB), M (MB), G (GB)

Terminal-Fenster
find . -mtime -7 # in den letzten 7 Tagen geändert
find . -mtime +30 # vor mehr als 30 Tagen geändert
find . -mtime 0 # heute geändert
find . -newer referenz.txt # neuer als referenz.txt
find /tmp -atime +3 # seit mehr als 3 Tagen nicht zugegriffen

-mtime = Änderungsdatum, -atime = letzter Zugriff, -ctime = Inode-Änderung

Terminal-Fenster
find . -maxdepth 1 -name "*.txt" # nur im aktuellen Verzeichnis, nicht tiefer
find . -maxdepth 2 -type d # Verzeichnisse bis Tiefe 2

find kann gefundene Dateien direkt weiterverarbeiten. {} steht dabei für den jeweiligen Dateinamen, \; beendet den Befehl:

Terminal-Fenster
find . -name "*.bak" -exec rm {} \; # alle .bak-Dateien löschen
find . -name "*.sh" -exec chmod +x {} \; # alle Skripte ausführbar machen
find . -type f -exec ls -lh {} \; # Dateigröße jeder gefundenen Datei

Mit + statt \; übergibt find alle Treffer auf einmal – effizienter bei vielen Dateien:

Terminal-Fenster
find . -name "*.log" -exec gzip {} + # alle Logs auf einmal komprimieren

Beim Durchsuchen von Systemverzeichnissen tauchen häufig Fehlermeldungen auf, weil find auf Verzeichnisse ohne Leseberechtigung trifft:

/etc/ssh/sshd_config
find / -name "sshd_config"
# find: '/proc/tty/driver': Permission denied
# find: '/root': Permission denied
# find: '/run/sudo': Permission denied

Die Fehlermeldungen gehen über stderr, das eigentliche Ergebnis über stdout. Mit 2>/dev/null werden nur die Fehlermeldungen unterdrückt – das Ergebnis bleibt:

/etc/ssh/sshd_config
find / -name "sshd_config" 2>/dev/null
Terminal-Fenster
# Alle Dateien größer 100MB finden und Größe anzeigen
find /home -type f -size +100M -exec ls -lh {} \;
# Alle leeren Verzeichnisse finden
find . -type d -empty
# Alte temporäre Dateien aufspüren
find /tmp -type f -mtime +7
# Log-Dateien der letzten 24 Stunden
find /var/log -name "*.log" -mtime -1
# Alle Konfig-Dateien eines Benutzers
find /home/alice -name ".*" -type f 2>/dev/null