(find files)
find durchsucht Dateiverzeichnisse und deren Unterdateiverzeichnisse nach Dateien, die angegebene Bedingungen erfüllen. Die gefundenen Dateien können Sie mit einem Kommando bearbeiten und/oder sich ihre Namen ausgeben lassen.
find sucht nicht nur nach einfachen Dateien, sondern auch nach Dateiverzeichnissen, Gerätedateien oder FIFOs.
Syntax
find dateivereichnis ausdruck |
Name des Dateiverzeichnisses, das durchsucht werden soll. find durchsucht dieses Dateiverzeichnis sowie rekusiv alle seine Unterdateiverzeichnisse, sofern Sie für die Dateiverzeichnisse Lese- und Ausführrecht besitzen (r- und x-Bit). Sie können mehrere Namen angeben.
Für ausdruck geben Sie entweder einen der unten aufgeführten elementaren Ausdrücke an oder mehrere elementare Ausdrücke, die Sie miteinander verknüpfen. find prüft ausdruck für jede Datei, die in einem der angegebenen Dateiverzeichnisse bzw. Unterdateiverzeichnisse steht, von links nach rechts ab. Ein elementarer Ausdruck ist für eine Datei entweder wahr oder falsch. Vom Wahrheitswert des Ausdrucks und dem darauffolgenden Verknüpfungsoperator hängt es ab, ob find den nächsten elementaren Ausdruck bearbeitet oder nicht. Die meisten elementaren Ausdrücke sind Bedingungen, d.h., sie sind wahr, wenn die aktuelle Datei die Bedingung erfüllt. Die Ausdrücke
sind keine Bedingungen. Sie bewirken, dass eine Aktion ausgeführt wird, z.B. Ausgebendes Dateinamens oder Löschen der Datei. Wenn find einen dieser Ausdrücke bearbeitet, wird die zugehörige Aktion auf jeden Fall ausgeführt, egal, ob der Ausdruck den Wert „wahr“ oder „falsch“ liefert. Wenn Sie keinen der obigen Ausdrücke angeben, bricht find mit einer Fehlermeldung ab. Innerhalb von ausdruck müssen Sie Sonderzeichender Shell entwerten, so dass die Shell sie nicht interpretiert, sondern an find übergibt. |
Elementare Ausdrücke als Bedingungen
Im Folgenden sind die elementaren Ausdrücke beschrieben; weiter unten erfahren Sie, wie Sie elementare Ausdrücke miteinander verknüpfen. Wenn Sie Optionen angeben, um Dateien mit bestimmten Eigenschaften herauszufinden (z.B. Dateien, die innerhalb einer bestimmten Zeit verändert wurden), so muss eine solche Option vor der Option -print (siehe unten) angegeben werden. Ansonsten werden alle Dateien ausgegeben. Der Parameter n steht für eine Dezimalzahl; +n bedeutet mehr als n, -n bedeutet weniger als n, und n bedeutet genau n.
Wahr, wenn die aktuelle Datei den Namen datei hat.
Wahr, wenn die aktuelle Datei die Zugriffsrechte modus hat (siehe chmod). modus kann auch eine Oktalzahl sein. Geben Sie vor modus oder der Oktalzahl ein Minuszeichen an, so werden nur die Bits mit den Zugriffsrechten verglichen, die in modus gesetzt sind, und der Ausdruck ist wahr, wenn sie übereinstimmen.
Wahr, wenn die aktuelle Datei vom Typ zeichen ist, wobei zeichen sein kann:
Wahr, wenn das Dateisystem, zu dem die aktuelle Datei gehört, vom Typ name ist, wobei name das Dateisystem ufs oder die Spezial-Dateisysteme wie proc oder fdfs sein kann.
Wahr, wenn auf die aktuelle Datei (mehr als / weniger als / genau) n Verweise bestehen.
Wahr, wenn der Index-Eintrag (inode) der aktuellen Datei größer, kleiner bzw. gleich n ist. Mit dem Ausdruck -inum +n -inum -m finden Sie alle Index-Einträge zwischen n und m.
Wahr, wenn die aktuelle Datei dem Benutzer benutzerkennung gehört. Diese Option ist nur für Benutzer mit uid=0 (Kommando id) sinnvoll.
Wahr, wenn die aktuelle Datei einer nicht vorhandenen Benutzerkennung gehört. Diese Option ist nur für Benutzer mit uid=0 (Kommando id) sinnvoll.
Wahr, wenn die aktuelle Datei der Gruppe gruppenname gehört.
Wahr, wenn die aktuelle Datei einer Gruppe gehört, die nicht in der Datei /etc/group als Gruppe eingetragen ist.
c nicht angegeben: c angegeben:
(a - access) Wahr, wenn auf die aktuelle Datei zuletzt vor (mehr als / weniger als / genau) (n-1) bis n*24 Stunden zugegriffen wurde. Die Zugriffszeit der Dateiverzeichnisse vom bzw. im durchsuchten Dateiverzeichnis wird von find selbst verändert.
(m - modification) Wahr, wenn die aktuelle Datei zuletzt vor (mehr als / weniger als / genau) (n-1) bis n*24 Stunden geändert wurde.
Wahr, wenn der Index-Eintrag (inode) der aktuellen Datei zuletzt vor (mehr als / weniger als / genau) (n-1) bis n*24 Stunden geändert wurde.
Wahr, wenn die aktuelle Datei jünger als die angegebene datei ist, d.h., wenn sie zu einem späteren Zeitpunkt erstellt oder geändert wurde.
Wahr, wenn sich die aktuelle Datei physikalisch auf dem lokalen Rechner befindet.
Immer wahr. Wird dieser Ausdruck bearbeitet, werden keine Dateien oder Dateiverzeichnisse durchsucht, die unterhalb der aktuellen Hierarchiestufe liegen.
Immer wahr. Wird dieser Ausdruck bearbeitet, werden keine Dateien oder Dateiverzeichnisse durchsucht, die unterhalb von Verzeichnissen liegen, die eine verschiedene Gerätenummer haben (st_dev, siehe Funktion stat() [4]). Ist -xdev gesetzt, so gilt dies für den gesamten Ausdruck, auch wenn -xdev normalerweise nicht bearbeitet würde. |
Elementare Ausdrücke, die Aktionen bewirken
Immer wahr. Wird dieser Ausdruck bearbeitet, gibt find den Pfadnamen der aktuellen Datei auf die Standard-Ausgabe aus.
kommando wird ausgeführt, sobald dieser Ausdruck bearbeitet wird. kommando müssen Sie mit einem Leerzeichen und einem entwerteten Strichpunkt \; abschließen. Ein Paar geschweifter Klammern {} als Kommandoargument steht für den Namen der aktuellen Datei. Der Ausdruck -exec kommando \; ist wahr, wenn kommando den Endestatus 0 liefert. Der Wahrheitswert ist von Bedeutung, wenn dieser Ausdruck mit weiteren Ausdrücken verknüpft ist.
Arbeitet wie -exec, nur fragt find jedesmal, wenn der Ausdruck bearbeitet wird, ob das Kommando ausgeführt werden soll. Das Kommando wird nur dann ausgeführt, wenn Sie mit dem Zeichen bzw. der Zeichenkette antworten, die in der aktuell gültigen Umgebung „y[es]“ bedeutet (siehe Umgebungsvariable LANG). |
Ausdrücke, die die Arbeitsweise von find beeinflussen
Immer wahr. Wird dieser Ausdruck bearbeitet, dann bearbeitet find die Einträge eines Dateiverzeichnisses eher als das Verzeichnis selbst.
Immer wahr. Wird dieser Ausdruck bearbeitet, dann wird symbolischen Verweisen nachgegangen. Dieser Ausdruck sollte nicht mit der Option -type l kombiniert werden.
Immer wahr. Wird dieser Ausdruck bearbeitet, dann beschränkt find seine Suche auf das Dateisystem, in dem sich das angegebene Dateiverzeichnis befindet. |
Ausdrücke verknüpfen
Die oben beschriebenen Ausdrücke können Sie wie folgt miteinander verknüpfen; beachten Sie die Leerzeichen vor und nach den Operatoren!
Klammern fassen mehrere Ausdrücke zusammen. Die Klammern müssen mit einem Gegenschrägstrich \ entwertet werden, da sie eine Sonderbedeutung für die Shell haben.
Negation: wahr, wenn der Ausdruck falsch ist.
logisches UND: wahr, wenn beide Ausdrücke wahr sind. Ist der erste Ausdruck falsch, dann bearbeitet find den zweiten Ausdruck nicht. Beispiel Ist der zweite Ausdruck
logisches ODER: wahr, wenn einer der Ausdrücke oder beide wahr sind. Ist der erste Ausdruck wahr, dann bearbeitet find den zweiten Ausdruck nicht. Beispiel Ist der zweite Ausdruck |
Fehler
Fehlermeldungen, die nicht zum Abbruch führen (Endestatus 0)
Fehlermeldungen, die zum Abbruch führen (Endestatus ungleich 0)
Sie haben beim find-Aufruf die elementaren Ausdrücke nicht richtig miteinander verknüpft oder bei einem elementaren Ausdruck mehrere Argumente angegeben.
Sie haben keine Aktion angegeben (print, exec, ok).
Sie haben ein Kommando bei -exec oder -ok nicht mit entwertetem Strichpunkt \; abgeschlossen.
Sie haben zu wenige Argumente angegeben.
Sie haben vergessen, die Pfadliste anzugeben. |
Datei
/etc/group Datei mit Gruppennamen |
Internationale Umgebung
Die folgenden Umgebungsvariablen beeinflussen die Ausführung des Kommandos find: LANG Gibt einen Standardwert für die Variablen für die internationale Umgebung an, die nicht gesetzt oder Null sind. Ist LANG nicht gesetzt oder Null, wird der entsprechende Standardwert der internationalen Umgebung verwendet. Enthält eine der Internationalisierungsvariablen eine ungültige Einstellung, verhält sich das Kommando so, als sei keine der Variablen definiert worden. LC_ALL Ist diese Variable auf einen Wert gesetzt, d. h. ist sie nicht leer, überschreibt dieser Wert die Werte aller übrigen Internationalisierungsvariablen. LC_COLLATE Wenn Sie Dateinamen in regulären Ausdrücken verwenden (geklammerte Dateinamensmuster wie z.B. find . -name ’[[=a=]]*’ -print), bestimmt LC_ COLLATE die Bedeutung von Zeichenbereichen, Äquivalenzklassen und Zeicheneinheiten. LC_CTYPE Legt die internationale Umgebung für die Interpretation der Byte-Folgen eines Datentexts als Zeichen fest (z.B. Singlebytezeichen im Unterschied zu Mehrbytezeichen in Argumenten und Eingabedateien) sowie die Einteilung der Zeichen in Groß- und Kleinbuchstaben und deren Übereinstimmung. LC_MESSAGES Legt die internationale Umgebung für Format und Inhalt der Diagnosemeldungen fest, die in die Standardfehlerausgabe geschrieben werden. NLSPATH Legt den Pfad der Meldungsdateien für LC_MESSAGES fest. |
Beispiel 1
Arbeitsweise von find - ein einfaches Beispiel: Die Pfadnamen aller Dateien ausgeben,
Hier besteht ausdruck aus zwei elementaren Ausdrücken, die mit einem logischen UND verknüpft sind. Für jede Datei prüft find zuerst den elementaren Ausdruck -name tmp ab. Ist dieser Ausdruck wahr (d.h. hat die aktuelle Datei den Namen tmp), dann bearbeitet find auch den Ausdruck -print, d.h., find gibt den Pfadnamen aus. Andernfalls bearbeitet find den Ausdruck -print nicht, d.h., find gibt nichts aus. Beachten Sie die Reihenfolge: Wenn Sie stattdessen
eingeben, dann bearbeitet find den Ausdruck -print für jede Datei, d.h., find gibt die Pfadnamen aller Dateien aus. |
Beispiel 2
Arbeitsweise von find - ein komplexeres Beispiel: Die Pfadnamen aller Dateien ausgeben,
Beachten Sie die Leerzeichen zwischen den Argumenten! Für jede Datei bearbeitet find zuerst den Inhalt der Klammern. Dieser besteht aus zwei elementaren Ausdrücken, die mit einem logischen ODER verknüpft sind. find prüft zuerst den elementaren Ausdruck -name tmp ab. Ist dieser Ausdruck wahr (d.h. hat die aktuelle Datei den Namen tmp), dann bearbeitet find den Ausdruck -name ’*.xx’ gar nicht mehr: das Ergebnis des geklammerten Ausdrucks ist dann auf jeden Fall wahr. Ist -name tmp falsch, prüft find den zweiten elementaren Ausdruck -name ’*.xx’ ab; ist er wahr (d.h. endet der Dateiname auf .xx), dann ist auch der geklammerte Ausdruck wahr, andernfalls ist der geklammerte Ausdruck falsch. Ist der geklammerte Ausdruck wahr, dann bearbeitet find den Ausdruck -print, d.h., find gibt den Dateinamen aus (UND-Verknüpfung - siehe Beispiel 1 !). Ist der geklammerte Ausdruck falsch, dann bearbeitet find den Ausdruck -print nicht, d.h., find gibt nichts aus. |
Beispiel 3
Alle Einträge im Dateiverzeichnis /usr/nikolaus und den Unterverzeichnissen ausgeben, deren Eigentümer nicht nikolaus ist.
|
Beispiel 4
Alle Dateien löschen,
Vor dem Löschen soll abgefragt werden, ob die Datei tatsächlich gelöscht werden soll.
|
Beispiel 5
Rekursives Drucken der Dateiverzeichnis-Struktur mit Auslassen aller SCCS-Dateiverzeichnisse.
|
Siehe auch
chmod, ln, test |