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.
Grundlegende Syntax
Abschnitt betitelt „Grundlegende Syntax“find startpfad [kriterien] [aktionen]find /home -name "*.txt" # alle .txt-Dateien unter /homefind . -name "config.yml" # im aktuellen Verzeichnis (und darunter)find / -name "sshd_config" # auf dem gesamten SystemSuche nach Name und Typ
Abschnitt betitelt „Suche nach Name und Typ“find . -name "*.log" # Groß-/Kleinschreibung beachtenfind . -iname "*.jpg" # -iname: Groß-/Kleinschreibung ignorieren
find . -type f # nur reguläre Dateienfind . -type d # nur Verzeichnissefind . -type l # nur symbolische Links
find . -type f -name "*.sh" # nur Dateien mit .sh-Endungfind . -type d -name "cache" # nur Verzeichnisse namens "cache"Suche nach Größe
Abschnitt betitelt „Suche nach Größe“find . -size +100M # größer als 100 MBfind . -size -10k # kleiner als 10 KBfind . -size +1M -size -500M # zwischen 1 MB und 500 MBfind /var/log -size +50M -type f # große Log-DateienEinheiten: c (Bytes), k (KB), M (MB), G (GB)
Suche nach Datum
Abschnitt betitelt „Suche nach Datum“find . -mtime -7 # in den letzten 7 Tagen geändertfind . -mtime +30 # vor mehr als 30 Tagen geändertfind . -mtime 0 # heute geändert
find . -newer referenz.txt # neuer als referenz.txtfind /tmp -atime +3 # seit mehr als 3 Tagen nicht zugegriffen-mtime = Änderungsdatum, -atime = letzter Zugriff, -ctime = Inode-Änderung
Suchtiefe begrenzen
Abschnitt betitelt „Suchtiefe begrenzen“find . -maxdepth 1 -name "*.txt" # nur im aktuellen Verzeichnis, nicht tieferfind . -maxdepth 2 -type d # Verzeichnisse bis Tiefe 2Aktionen auf Treffer anwenden: -exec
Abschnitt betitelt „Aktionen auf Treffer anwenden: -exec“find kann gefundene Dateien direkt weiterverarbeiten. {} steht dabei für den jeweiligen Dateinamen, \; beendet den Befehl:
find . -name "*.bak" -exec rm {} \; # alle .bak-Dateien löschenfind . -name "*.sh" -exec chmod +x {} \; # alle Skripte ausführbar machenfind . -type f -exec ls -lh {} \; # Dateigröße jeder gefundenen DateiMit + statt \; übergibt find alle Treffer auf einmal – effizienter bei vielen Dateien:
find . -name "*.log" -exec gzip {} + # alle Logs auf einmal komprimierenstderr und Berechtigungsfehler
Abschnitt betitelt „stderr und Berechtigungsfehler“Beim Durchsuchen von Systemverzeichnissen tauchen häufig Fehlermeldungen auf, weil find auf Verzeichnisse ohne Leseberechtigung trifft:
find / -name "sshd_config"# find: '/proc/tty/driver': Permission denied# find: '/root': Permission denied# find: '/run/sudo': Permission deniedDie Fehlermeldungen gehen über stderr, das eigentliche Ergebnis über stdout. Mit 2>/dev/null werden nur die Fehlermeldungen unterdrückt – das Ergebnis bleibt:
find / -name "sshd_config" 2>/dev/nullKombinierte Beispiele
Abschnitt betitelt „Kombinierte Beispiele“# Alle Dateien größer 100MB finden und Größe anzeigenfind /home -type f -size +100M -exec ls -lh {} \;
# Alle leeren Verzeichnisse findenfind . -type d -empty
# Alte temporäre Dateien aufspürenfind /tmp -type f -mtime +7
# Log-Dateien der letzten 24 Stundenfind /var/log -name "*.log" -mtime -1
# Alle Konfig-Dateien eines Benutzersfind /home/alice -name ".*" -type f 2>/dev/null