VMware ESXi and vSphere Cluster Management
Dateien und Verzeichnisse mit find suchen
Lerne, wie du mit find Dateien und Verzeichnisse nach Namen, Typ, Größe, Eigentümer, Gruppe und Berechtigungen suchst.
find ist ein Kommandozeilenwerkzeug für die rekursive Suche in einem Verzeichnisbaum. Es kann Dateien und Verzeichnisse anhand von Namen, Dateityp, Größe, Eigentümer, Gruppe und Linux-Berechtigungen finden.
Die Suche erfolgt live: find liest den angegebenen Verzeichnisbaum und berücksichtigt den aktuellen Zustand des Dateisystems. Das ist besonders nützlich, wenn aktuelle Ergebnisse wichtig sind. Eine Suche ab einem sehr großen Bereich, etwa ab /, kann jedoch länger dauern als eine indexbasierte Namenssuche mit locate.
Grundsyntax von find
find STARTPFAD AUSDRUCKDer Startpfad legt fest, ab welchem Verzeichnis find sucht. Ein Punkt steht für das aktuelle Verzeichnis:
find .Du kannst auch einen absoluten Pfad angeben:
find /homeDer Ausdruck besteht aus einem oder mehreren Suchtests. Ohne einschränkenden Ausdruck gibt find . alle Einträge unterhalb des aktuellen Verzeichnisses aus. Die Suche ist rekursiv: Unterverzeichnisse werden ebenfalls durchsucht.
Häufige find-Ausdrücke
Nach Dateinamen suchen
Exakter Name mit -name
Mit -name suchst du nach dem Namen eines Eintrags. Die Prüfung unterscheidet zwischen Groß- und Kleinschreibung:
find . -name 'bericht.txt'Damit wird beispielsweise bericht.txt gefunden, nicht aber Bericht.txt.
Wildcards und Quotierung
Shell-Wildcards, auch Musterzeichen genannt, beschreiben variable Teile eines Namens. Das Zeichen * steht für eine beliebige Folge von Zeichen:
find . -name 'so*'Dieser Befehl findet Einträge, deren Name mit so beginnt. Das Muster sollte in einfachen oder doppelten Anführungszeichen stehen. Andernfalls kann die Shell das * bereits vor dem Start von find auf Dateien im aktuellen Verzeichnis anwenden. find erhält dann nicht mehr das gewünschte Muster.
Für eine Suche ohne Beachtung der Groß- und Kleinschreibung verwendest du -iname:
find . -type f -iname '*.jpg'Dateitypen mit -type prüfen
-type f beschränkt die Ergebnisse auf reguläre Dateien. -type d liefert nur Verzeichnisse:
find . -type ffind . -type dDer Dateityp lässt sich mit weiteren Tests verbinden:
find . -type f -name 'so*'Hier müssen die Ergebnisse sowohl reguläre Dateien sein als auch dem Namensmuster entsprechen.
Dateien nach Größe suchen
Der Test -size vergleicht die Größe eines Eintrags mit einem Zahlenwert und einer Einheit. Ein vorangestelltes + sucht größere, ein vorangestelltes - kleinere Einträge. Ohne Operator wird nach der entsprechenden Größenklasse gesucht.
Beispiel für Dateien mit mehr als 300 Bytes:
find . -type f -size +300cBei Einheiten wie k, M und G arbeitet find mit Einheiten und Rundung. Eine exakte Suche nach einer beliebigen Bytezahl kann deshalb unerwartete Ergebnisse liefern, wenn die gewählte Einheit nicht passend ist. Für kleine exakte Werte ist c meist die klarste Wahl. Prüfe außerdem genau, ob du eine exakte Größenklasse oder einen Vergleich mit + beziehungsweise - benötigst.
Eigentümer und Gruppe finden
Eigentümer mit -user
Jedes Linux-Dateisystemobjekt hat einen Dateieigentümer, also ein Benutzerkonto, dem es zugeordnet ist. Mit -user suchst du nach dem Benutzernamen:
find /home -user aliceDer Startpfad /home begrenzt die Suche auf die Home-Verzeichnisse.
Gruppe mit -group
Zusätzlich besitzt ein Objekt eine Dateigruppe. Gruppen werden für gemeinsame Zugriffsrechte verwendet:
find /srv -group projektteamBenutzer- und Gruppennamen müssen auf dem System vorhanden beziehungsweise auflösbar sein. Diese Tests sind besonders hilfreich bei der Kontrolle gemeinsamer Projektverzeichnisse und bei der Fehlersuche rund um Dateirechte.
Berechtigungen mit -perm prüfen
-perm sucht nach Unix-Dateiberechtigungen. Ein Berechtigungscode wie 775 ist oktal geschrieben und besteht aus drei Stellen:
- Die erste Stelle beschreibt die Rechte des Besitzers.
- Die zweite Stelle beschreibt die Rechte der Gruppe.
- Die dritte Stelle beschreibt die Rechte für andere Benutzer.
Die Werte stehen für Kombinationen aus Lesen, Schreiben und Ausführen: Lesen entspricht 4, Schreiben 2 und Ausführen 1. Der Code 775 bedeutet daher Besitzer und Gruppe mit rwx sowie andere Benutzer mit r-x.
Eine exakte Suche nach diesem Berechtigungscode lautet:
find . -perm 775Je nach Schreibweise prüft find entweder die vollständige Rechtekombination oder bestimmte gesetzte Rechte. Bei GNU find kann beispielsweise /775 verwendet werden, um zu prüfen, ob alle in 775 angegebenen Rechte gesetzt sind, auch wenn weitere Rechte vorhanden sind:
find . -perm /775Verwende die exakte Form, wenn die gesamte Berechtigungsmaske übereinstimmen soll, und eine passende Teilmengenprüfung, wenn nur bestimmte Rechte erforderlich sind. Achte dabei auf die Syntax deiner find-Implementierung.
Mehrere Ausdrücke kombinieren
Direkt hintereinander stehende Tests sind standardmäßig mit UND verknüpft. Ein Eintrag muss also alle Bedingungen erfüllen:
find . -type f -perm 775 -name 't*'Diese Suche findet reguläre Dateien, deren Name mit t beginnt und deren Berechtigungen exakt 775 entsprechen.
Eine weitere Kombination aus Dateityp und Namensmuster sieht so aus:
find . -type f -name 'so*'Je gezielter der Startpfad und je passender die Kriterien sind, desto übersichtlicher und effizienter ist die Ergebnisliste. Für alternative Bedingungen gibt es -o als ODER-Operator. Klammern müssen vor der Shell geschützt werden:
find . \( -name '*.jpg' -o -name '*.png' \)Die Klammerung sorgt dafür, dass die beiden Namensbedingungen als gemeinsame Alternative behandelt werden.
find, locate und grep im Vergleich
Wenn du wissen möchtest, welche Dateien aktuell existieren oder wem sie gehören, ist find das passende Werkzeug. Wenn du nur schnell einen Dateinamen anhand eines Indexes suchst, kann locate schneller sein. Wenn du dagegen einen bestimmten Text innerhalb von Dateien finden möchtest, verwendest du grep.
Sichere und praktische Verwendung
Eine find-Suche zeigt zunächst nur Ergebnisse an. Die gezeigten Befehle verändern, löschen oder verschieben keine Dateien. Vorsicht ist jedoch geboten, wenn du die Ausgabe später an andere Befehle weitergibst, etwa über Pipes, xargs oder -exec.
Namen können Leerzeichen und Sonderzeichen enthalten. Deshalb sollten Ausgaben bei einer nachfolgenden Verarbeitung sorgfältig behandelt werden. Für reine Anzeige ist die normale Ausgabe meist ausreichend; für automatisierte Verarbeitung sind robuste, nullbyte-getrennte Varianten und eine passende Weiterverarbeitung erforderlich.
Wähle den Suchbereich möglichst gezielt. Statt unnötig ab / zu suchen, ist beispielsweise /home/alice, /var/log oder ein Projektverzeichnis sinnvoller. Eine Suche ab dem Wurzelverzeichnis kann außerdem Zugriffsfehler auslösen oder sehr lange dauern.
Fehlerbehebung
Wildcard wird unerwartet ausgewertet
Ursache: Die Shell hat das Muster mit * vor dem Start von find ersetzt.
Lösung: Das Muster quotieren:
find . -name 'so*'-name findet einen ähnlich aussehenden Namen nicht
Ursache: -name unterscheidet Groß- und Kleinschreibung.
Lösung: Die Schreibweise korrigieren oder -iname verwenden.
Meldungen zu fehlenden Berechtigungen
Ursache: Dein Benutzer darf bestimmte Verzeichnisse nicht lesen oder betreten.
Lösung: Einen zugänglichen Startpfad verwenden, die Berechtigungen prüfen oder die Suche bei administrativ notwendigen Aufgaben mit passenden Rechten ausführen. Erhöhte Rechte sollten nur verwendet werden, wenn sie wirklich erforderlich sind.
Die Suche ab / dauert lange
Ursache: find durchsucht den gesamten erreichbaren Verzeichnisbaum live.
Lösung: Den Startpfad einschränken und Kriterien wie -type und -name verwenden. Für eine reine, nicht zwingend aktuelle Namenssuche kann locate geeigneter sein.
Größensuche liefert unerwartete Treffer
Ursache: Einheit, Rundungsverhalten oder Vergleichsoperator wurde falsch gewählt.
Lösung: c, k, M oder G passend einsetzen und zwischen exakter Größenklasse, + für größer und - für kleiner unterscheiden.
Berechtigungssuche liefert zu viele oder zu wenige Treffer
Ursache: Der oktale Code oder die Bedeutung der gewählten -perm-Schreibweise wurde falsch interpretiert.
Lösung: Prüfen, ob eine exakte Übereinstimmung oder nur das Vorhandensein bestimmter gesetzter Rechte gesucht wird.
locate findet eine Datei nicht, find aber schon
Ursache: Die locate-Datenbank ist nicht aktuell oder umfasst den betreffenden Bereich nicht.
Lösung: Für aktuelle Ergebnisse find verwenden und bei locate den Indexstatus sowie die Systemkonfiguration berücksichtigen.
Wichtige Prüfungsnotizen
- Die Grundform lautet
find STARTPFAD AUSDRUCK. .bezeichnet das aktuelle Verzeichnis; ein Pfad wie/homebeginnt an einer festen Stelle im Dateisystem.-namesucht case-sensitiv,-inamecase-insensitiv.-type fsteht für reguläre Dateien,-type dfür Verzeichnisse.- Mehrere direkt folgende Tests sind standardmäßig UND-verknüpft.
-userprüft den Eigentümer,-groupdie Gruppenzugehörigkeit und-permdie Berechtigungsmaske.-size +300csucht Einträge größer als 300 Bytes.- find arbeitet live, locate mit einem möglicherweise veralteten Index und grep mit Dateiinhalten.