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.