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 AUSDRUCK

Der 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 /home

Der 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

Ausdruck — Zweck — Beispiel

-name — Suche nach einem Namen oder Namensmuster — find . -name 'bericht.txt'

-perm — Suche nach Unix-Berechtigungen — find . -perm 775

-size — Suche nach Dateigröße — find . -size +300c

-type f — Nur reguläre Dateien — find . -type f

-type d — Nur Verzeichnisse — find . -type d

-user — Suche nach Dateieigentümer — find /home -user alice

-group — Suche nach Dateigruppe — find /srv -group projektteam

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 f
find . -type d

Der 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.

Suffix oder Operator — Bedeutung — Beispiel

c — Bytes — -size 300c

k — Kilobytes, typischerweise 1024 Bytes — -size +100k

M — Megabytes — -size +10M

G — Gigabytes — -size -2G

+ — größer als der angegebene Wert — -size +300c

- — kleiner als der angegebene Wert — -size -1M

Beispiel für Dateien mit mehr als 300 Bytes:

find . -type f -size +300c

Bei 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 alice

Der 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 projektteam

Benutzer- 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 775

Je 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 /775

Verwende 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

Werkzeug — Wonach wird gesucht? — Datenquelle — Stärke — Einschränkung

find — Dateien, Verzeichnisse und Metadaten — aktueller Verzeichnisbaum — aktuelle und vielseitige Suche — kann bei großen Suchbereichen langsam sein

locate — hauptsächlich Dateinamen — zuvor erzeugte Datenbank — sehr schnelle Namenssuche — Ergebnisse können veraltet sein oder Bereiche nicht enthalten

grep — Textinhalte in Dateien — Inhalt der angegebenen Dateien oder Eingabedaten — Suche nach Textmustern — sucht nicht primär nach Dateisystemobjekten und Metadaten

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 /home beginnt an einer festen Stelle im Dateisystem.
  • -name sucht case-sensitiv, -iname case-insensitiv.
  • -type f steht für reguläre Dateien, -type d für Verzeichnisse.
  • Mehrere direkt folgende Tests sind standardmäßig UND-verknüpft.
  • -user prüft den Eigentümer, -group die Gruppenzugehörigkeit und -perm die Berechtigungsmaske.
  • -size +300c sucht Einträge größer als 300 Bytes.
  • find arbeitet live, locate mit einem möglicherweise veralteten Index und grep mit Dateiinhalten.