Linux / Befehl find: Dateien nach Name, Typ, Größe und Zeit suchen
Der find-Befehl durchläuft einen oder mehrere Verzeichnisbäume und bewertet Bedingungen für jeden Eintrag. Er kann Namen, Typen, Größen, Zeitstempel, Berechtigungen und andere Metadaten abgleichen und dann Ergebnisse ausgeben oder eine Aktion auf passende Pfade ausführen.
Ergänzende Befehle und Anwendungsfälle finden Sie in Essenzielle Linux-Befehle: Ein praktisches Nachschlagewerk nach Aufgabe.
Was ist der find-Befehl?
Seine Befehlszeile besteht aus Startpfaden, gefolgt von einem Ausdruck. Der Ausdruck enthält Tests, logische Operatoren und Aktionen, die von links nach rechts ausgewertet werden. Wenn keine Aktion angegeben ist, werden passende Pfade ausgegeben. Da es das aktive Dateisystem liest, spiegeln die Ergebnisse den Zustand wider, der während des Durchsuchens angetroffen wurde.
Grundlegende Syntax
find [STARTING-POINT]... [EXPRESSION]
Optionen und Randfälle können je nach Implementierung und Version variieren. Überprüfen Sie find --help und man find auf dem Zielsystem, bevor Sie sich auf implementierungsspezifisches Verhalten verlassen.
Grundlegende Verwendung von find
Suche nach Name
Setzen Sie Platzhaltermuster in Anführungszeichen, damit die Shell sie nicht erweitert, bevor find das Muster erhält.
find . -name '*.log'
Nach Typ und Größe filtern
Hier wählt -type f reguläre Dateien und -size +100M Dateien größer als 100 MiB in GNU find aus.
find /var -type f -size +100M
Nach Änderungszeit filtern
-mtime verwendet gerundete 24-Stunden-Perioden. Verwenden Sie -mmin, wenn Fenster auf Minutenebene angemessener sind.
find /srv/app -type f -mmin -60
Suchbereich und Ergebnis-Pfade überprüfen
find sucht tatsächlich unter dem angegebenen Startverzeichnis. Setzen Sie das Muster in Anführungszeichen, damit die Shell es nicht zuerst erweitert.
mkdir -p demo-find touch demo-find/a.txt find demo-find -name '*.txt'
Beispielausgabe:
demo-find/a.txt
Die Standardausgabe zeigt Pfade einschließlich des Startpfads. Überprüfen Sie vor der Kombination mit -delete oder -exec zuerst, dass die Suchergebnisse nur die vorgesehenen Dateien enthalten.
Wichtige Optionen
| Option | Zweck |
|---|---|
-name PATTERN |
Übereinstimmung mit einem groß-/kleinschreibungsempfindlichen Basename-Muster. |
-iname PATTERN |
Übereinstimmung mit einem Basename-Muster ohne Beachtung der Groß-/Kleinschreibung. |
-type TYPE |
Einschränkung der Ergebnisse auf reguläre Dateien, Verzeichnisse, Links oder einen anderen Typ. |
-maxdepth N |
Begrenzung des Abstiegs unter jedem Ausgangspunkt. |
-mtime N |
Prüfung des Änderungsalters in 24-Stunden-Einheiten. |
-size N |
Prüfung der Dateigröße mit optionaler Einheitenangabe. |
-exec COMMAND {} + |
Übergabe von Batches übereinstimmender Pfade sicher als Befehlsargumente. |
-delete |
Löschen übereinstimmender Einträge nach sorgfältiger Validierung des Ausdrucks. |
Praktische Beispiele
Leere Verzeichnisse finden
Kombinieren Sie -empty mit einem Typentest, da auch leere reguläre Dateien übereinstimmen können.
find . -type d -empty -print
Verarbeiten Sie passende Dateien sicher
Die {} +-Form erstellt Batches und erhält Dateinamen, die Leerzeichen oder Zeilenumbrüche enthalten.
find . -type f -name '*.tmp' -exec ls -l -- {} +
Vor dem Löschen überprüfen
Führen Sie zuerst den genauen Pfad und die Tests mit -print aus. Fügen Sie -delete nur hinzu, nachdem die Ausgabe korrekt ist.
find ./cache -type f -mtime +30 -print find ./cache -type f -mtime +30 -delete
find und verwandte Befehle
| Befehl | Hauptrolle | Geeignet für |
|---|---|---|
find |
Das laufende Dateisystem durchsuchen | Detaillierte Metadaten-Tests und Aktionen |
locate |
Eine Dateinamensuche durchführen | Schnelle Namenssuche |
which |
PATH nach ausführbaren Dateien durchsuchen | Einen externen Befehl finden |
grep -R |
Dateiinhalte durchsuchen | Textmuster finden |
Wichtige Hinweise
Platzhaltermuster zitieren
Ein nicht in Anführungszeichen gesetztes Muster wie *.log kann von der aktuellen Shell erweitert werden und den Ausdruck ändern.
-delete wirkt sofort
Überprüfen Sie die Startpunkte und Tests mit -print und berücksichtigen Sie das Verhalten von Einhängepunkten und symbolischen Links.
Verstehen Sie die Priorität von Ausdrücken
Beim Kombinieren von -o mit anderen Tests, gruppieren Sie Bedingungen ausdrücklich und schützen Sie Klammern vor der Shell.
FAQ
Durchsucht find automatisch Unterverzeichnisse?
Ja. Es durchläuft rekursiv alle Startpunkte, sofern die Tiefenoptionen dies nicht einschränken.
Wie ignoriere ich die Groß-/Kleinschreibung bei einem Dateinamenvergleich?
GNU find bietet -iname.
Wie gehe ich sicher mit Leerzeichen um?
Verwenden Sie -exec COMMAND {} + oder NUL-getrennte Ausgaben mit einem kompatiblen Verbraucher.
Warum ist find langsamer als locate?
Find durchsucht den aktuellen Verzeichnisbaum, während locate eine vorgefertigte Datenbank abfragt.
Weitere Angaben zu Syntax, Implementierung und Verfügbarkeit finden Sie unter GNU Findutils Handbuch.




