find — Dateien und Verzeichnisse im Verzeichnisbaum suchen
Praxis-Guide zu find: Dateien und Verzeichnisse nach Name, Typ, Größe, Zeit und Rechten suchen und gefundene Treffer direkt weiterverarbeiten.
find durchsucht ganze Verzeichnisbäume und filtert Dateien und Verzeichnisse nach Name, Typ, Größe, Zeitstempel, Rechten und vielem mehr – und arbeitet mit den Treffern direkt weiter. Statt nur Pfade auszugeben, hängst du über -exec, -delete oder eine Pipe zu xargs beliebige Aktionen an. Genau hier liegt die Schärfe des Werkzeugs: find … -delete und find … -exec rm löschen rekursiv und unwiderruflich – teste deshalb jede destruktive Suche zuerst mit -print. Bei Dateinamen mit Leerzeichen oder Sonderzeichen sicherst du dich mit -print0 | xargs -0 oder -exec … {} + ab. Dieser Guide zeigt dir die Ausdrücke, die du im Alltag wirklich brauchst – von der einfachen Namenssuche bis zur gefilterten Massenverarbeitung.
Grundlegende Suche
find <path> — Listet alle Dateien und Verzeichnisse rekursiv unterhalb des angegebenen Pfads auf.
find /home/user/projects/find . — Listet alle Dateien und Verzeichnisse rekursiv unterhalb des aktuellen Verzeichnisses auf.
find <path> -maxdepth <n> — Begrenzt die Suchtiefe auf n Ebenen unterhalb des Startpunkts.
find . -maxdepth 2find <path> -mindepth <n> — Überspringt die ersten n Ebenen und liefert nur tiefer liegende Treffer.
find . -mindepth 2find <path1> <path2> — Sucht in mehreren Verzeichnissen gleichzeitig.
find /var/log /tmp -name '*.log'Suche nach Name
find <path> -name '<pattern>' — Findet Dateien, die auf ein Namensmuster passen (Groß-/Kleinschreibung beachtet, mit Wildcards).
find . -name '*.js'find <path> -iname '<pattern>' — Findet Dateien anhand eines Namensmusters (ohne Beachtung der Groß-/Kleinschreibung).
find . -iname '*.jpg'find <path> -name '<pattern>' -not -name '<pattern>' — Findet Dateien, die auf ein Muster passen, aber nicht auf ein anderes.
find . -name '*.js' -not -name '*.min.js'find <path> -path '<pattern>' — Vergleicht mit dem gesamten Pfad, nicht nur mit dem Dateinamen.
find . -path '*/src/*.ts'find <path> -regex '<pattern>' — Findet Dateinamen über einen regulären Ausdruck (passt auf den gesamten Pfad).
find . -regex '.*\.(js\|ts)$'find <path> -iregex '<pattern>' — Findet Dateinamen über einen regulären Ausdruck ohne Beachtung der Groß-/Kleinschreibung.
find . -iregex '.*\.jpe?g$'Suche nach Typ
find <path> -type f — Findet nur reguläre Dateien.
find /var/log -type f -name '*.log'find <path> -type d — Findet nur Verzeichnisse.
find . -type d -name 'node_modules'find <path> -type l — Findet nur symbolische Links.
find /usr/bin -type lfind <path> -type f -empty — Findet leere Dateien (null Bytes).
find /tmp -type f -emptyfind <path> -type d -empty — Findet leere Verzeichnisse.
find . -type d -emptySuche nach Größe
find <path> -size +<n>M — Findet Dateien, die größer als n Megabyte sind.
find / -size +100Mfind <path> -size -<n>k — Findet Dateien, die kleiner als n Kilobyte sind.
find . -size -10kfind <path> -size <n>c — Findet Dateien mit exakt n Bytes.
find . -size 0cfind <path> -size +<n>G — Findet Dateien, die größer als n Gigabyte sind.
find / -type f -size +1Gfind <path> -size +<min>M -size -<max>M — Findet Dateien innerhalb eines Größenbereichs.
find . -type f -size +10M -size -100MSuche nach Zeit
find <path> -mtime -<n> — Findet Dateien, die in den letzten n Tagen geändert wurden.
find . -mtime -7find <path> -mtime +<n> — Findet Dateien, die vor mehr als n Tagen geändert wurden.
find /var/log -mtime +30find <path> -mmin -<n> — Findet Dateien, die in den letzten n Minuten geändert wurden.
find . -mmin -60find <path> -atime -<n> — Findet Dateien, auf die in den letzten n Tagen zugegriffen wurde.
find . -atime -7find <path> -ctime -<n> — Findet Dateien, deren Status (Metadaten) in den letzten n Tagen geändert wurde.
find . -ctime -1find <path> -newer <reference> — Findet Dateien, die neuer sind als eine Referenzdatei.
find . -newer /tmp/timestamp.txtfind <path> -newermt '<date>' — Findet Dateien, die nach einem bestimmten Datum geändert wurden (GNU find).
find . -newermt '2025-01-01'find <path> -not -newermt '<date>' — Findet Dateien, die vor einem bestimmten Datum geändert wurden.
find . -type f -not -newermt '2024-06-01'Suche nach Rechten & Eigentümer
find <path> -perm <mode> — Findet Dateien mit exakt den angegebenen Rechten.
find . -perm 644find <path> -perm -<mode> — Findet Dateien, bei denen alle angegebenen Rechte-Bits gesetzt sind.
find . -perm -u+xfind <path> -perm /<mode> — Findet Dateien, bei denen eines der angegebenen Rechte-Bits gesetzt ist.
find . -perm /o+wfind <path> -user <username> — Findet Dateien, die einem bestimmten Benutzer gehören.
find /home -user www-datafind <path> -group <groupname> — Findet Dateien, die zu einer bestimmten Gruppe gehören.
find /var -group stafffind <path> -nouser — Findet Dateien, die keinem bekannten Benutzer gehören.
find <path> -nogroup — Findet Dateien, die zu keiner bekannten Gruppe gehören.
find <path> -perm -4000 — Findet Dateien mit gesetztem SUID-Bit.
find /usr -perm -4000 -type ffind <path> -perm -2000 — Findet Dateien mit gesetztem SGID-Bit.
find /usr -perm -2000 -type fAktionen
find <path> <expression> -print — Gibt den vollständigen Pfad jedes Treffers aus (Standardaktion).
find . -name '*.log' -printfind <path> <expression> -print0 — Gibt Treffer durch ein Null-Zeichen getrennt aus (sicher für Dateinamen mit Leerzeichen).
find . -name '*.txt' -print0 | xargs -0 wc -lfind <path> <expression> -ls — Gibt Treffer im Format von ls -l mit detaillierten Dateiinfos aus.
find /tmp -type f -mtime -1 -lsfind <path> <expression> -delete — Löscht alle passenden Dateien (mit Vorsicht verwenden, vorher mit -print testen).
find /tmp -type f -name '*.tmp' -mtime +7 -deletefind <path> <expression> -exec <command> {} \; — Führt für jeden Treffer einen Befehl aus. {} wird durch den Dateinamen ersetzt.
find . -name '*.log' -exec rm {} \;find <path> <expression> -exec <command> {} + — Führt einen Befehl mit allen Treffern als Argumente aus (schneller als ;).
find . -name '*.txt' -exec grep -l 'TODO' {} +find <path> <expression> -execdir <command> {} \; — Führt einen Befehl im Verzeichnis jedes Treffers aus (sicherer als -exec).
find . -name '*.bak' -execdir rm {} \;find <path> <expression> -ok <command> {} \; — Wie -exec, fragt aber vor jeder Ausführung nach Bestätigung.
find . -name '*.tmp' -ok rm {} \;Logische Operatoren
find <path> -name '<a>' -and -name '<b>' — Trifft auf Dateien zu, die beide Bedingungen erfüllen (UND, Standard bei Aneinanderreihung).
find . -name '*.js' -and -size +100kfind <path> -name '<a>' -or -name '<b>' — Trifft auf Dateien zu, die eine der Bedingungen erfüllen (ODER).
find . -name '*.jpg' -or -name '*.png'find <path> -not <expression> — Negiert einen Ausdruck (NICHT).
find . -type f -not -name '*.log'find <path> \( <expr1> -or <expr2> \) -and <expr3> — Gruppiert Ausdrücke mit maskierten Klammern, um die Auswertungsreihenfolge festzulegen.
find . \( -name '*.js' -or -name '*.ts' \) -and -size +10kAusgabe & Formatierung
find <path> -printf '<format>' — Gibt Treffer in einem eigenen Format aus (GNU find).
find . -type f -printf '%s %p\n'find <path> -printf '%T+ %p\n' — Gibt Änderungszeit und Pfad jeder Datei aus.
find . -type f -printf '%T+ %p\n' | sort -r | head -20find <path> -printf '%s\t%p\n' — Gibt Dateigröße (Bytes) und Pfad tab-getrennt aus.
find . -type f -printf '%s\t%p\n' | sort -rn | head -10find <path> -fprintf <file> '<format>' — Schreibt formatierte Ausgabe in eine Datei statt nach stdout.
find /var/log -type f -fprintf /tmp/logfiles.txt '%p\n'Verzeichnisse ausschließen
find <path> -name '<dir>' -prune -o <expression> -print — Schließt ein Verzeichnis mit -prune von der Suche aus.
find . -name 'node_modules' -prune -o -name '*.js' -printfind <path> -path '<pattern>' -prune -o <expression> -print — Schließt Verzeichnisse aus, die auf ein Pfadmuster passen.
find . -path './.git' -prune -o -type f -printfind <path> \( -name '<a>' -o -name '<b>' \) -prune -o <expression> -print — Schließt mehrere Verzeichnisse von der Suche aus.
find . \( -name 'node_modules' -o -name '.git' \) -prune -o -type f -name '*.ts' -printPraktische Beispiele
find . -type f -name '*.log' -mtime +30 -delete — Löscht Logdateien, die älter als 30 Tage sind.
find . -type f -name '*.php' -exec grep -l '<pattern>' {} + — Findet PHP-Dateien, die eine bestimmte Zeichenkette enthalten.
find . -type f -name '*.php' -exec grep -l 'TODO' {} +find . -type f -exec chmod 644 {} + — Setzt die Rechte aller regulären Dateien auf 644.
find . -type d -exec chmod 755 {} + — Setzt die Rechte aller Verzeichnisse auf 755.
find . -type f -name '*.txt' -print0 | xargs -0 tar -czf texts.tar.gz — Erstellt ein tar-Archiv aller .txt-Dateien (verarbeitet Leerzeichen in Namen korrekt).
find . -type f -printf '%s\t%p\n' | sort -rn | head -20 — Findet die 20 größten Dateien in einem Verzeichnisbaum.
find . -type f -name '*.jpg' -exec cp {} /backup/images/ \; — Kopiert alle JPEG-Dateien in ein Backup-Verzeichnis.
find . -maxdepth 1 -type f -name '*.bak' -exec mv {} {}.old \; — Benennt alle .bak-Dateien im aktuellen Verzeichnis um, indem .old angehängt wird.
find . -name '*.orig' -o -name '*.bak' -o -name '*~' | xargs rm -f — Entfernt gängige Backup- und temporäre Dateien.
find /var/log -type f -size +50M -exec ls -lh {} + — Listet große Logdateien mit menschenlesbaren Größen auf.
Fazit
find ist eines der mächtigsten Werkzeuge der Kommandozeile: Mit kombinierbaren Tests nach Name, Typ, Größe, Zeit und Rechten grenzt du auch riesige Verzeichnisbäume präzise ein und verarbeitest die Treffer in einem Rutsch weiter. Dieselbe Mächtigkeit macht find aber gefährlich – -delete und -exec rm … {} + löschen rekursiv und ohne Rückfrage; teste jede destruktive Suche zuerst mit -print und nutze bei Dateinamen mit Leerzeichen konsequent -print0 | xargs -0 oder -exec … {} + statt einer einfachen Pipe. Beachte außerdem, dass -printf/-fprintf, -regex und -newermt GNU-Erweiterungen sind: Das find auf macOS und BSD kennt -printf nicht und verhält sich bei einigen Optionen anders.
Weiterführende Links
- ubuntuusers-Wiki: find – ausführliche deutschsprachige Anleitung zur Dateisuche mit find
- GNU-Findutils-Handbuch – vollständige offizielle Referenz aller find-Optionen (englisch)