Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

find - Dateiverzeichnisse durchsuchen

&pagelevel(4)&pagelevel

(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

dateiverzeichnis

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.

ausdruck

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

-print
-exec kommando \;
-ok kommando \;

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.

-name datei

Wahr, wenn die aktuelle Datei den Namen datei hat.
Für datei können Sie die üblichen Sonderzeichen der Shell zur Dateinamen-Generierung verwenden, müssen dann aber datei in Hochkommas einschließen, z.B. find /usr/adam -name ’gruppe.*’ (siehe Tabellen und Verzeichnisse, Sonderzeichen der POSIX-Shell). Sie dürfen nur einfache Dateinamen angeben (nicht erlaubt ist z.B. text/tmp).

-perm modus

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.

-type zeichen

Wahr, wenn die aktuelle Datei vom Typ zeichen ist, wobei zeichen sein kann:


ffür einfache Datei (ordinary file)
dfür Dateiverzeichnis (directory)
bfür blockorientierte Gerätedatei (block special file)
cfür zeichenorientierte Gerätedatei (character special file)
lfür symbolische Verweise (symbolic links)
pfür FIFO (named pipe)


-fstype name

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.

-links [+-]n

Wahr, wenn auf die aktuelle Datei (mehr als / weniger als / genau) n Verweise bestehen.

-inum [+-]n

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.

-user benutzerkennung

Wahr, wenn die aktuelle Datei dem Benutzer benutzerkennung gehört. Diese Option ist nur für Benutzer mit uid=0 (Kommando id) sinnvoll.

-nouser

Wahr, wenn die aktuelle Datei einer nicht vorhandenen Benutzerkennung gehört. Diese Option ist nur für Benutzer mit uid=0 (Kommando id) sinnvoll.

-group gruppenname

Wahr, wenn die aktuelle Datei der Gruppe gruppenname gehört.

-nogroup

Wahr, wenn die aktuelle Datei einer Gruppe gehört, die nicht in der Datei /etc/group als Gruppe eingetragen ist.

-size [+-]n[c]

c nicht angegeben:
Wahr, wenn die aktuelle Datei (mehr / weniger als / genau) n Blöcke zu je 512 Byte belegt.

c angegeben:
Wahr, wenn die aktuelle Datei (mehr / weniger als / genau) n Byte belegt.

-atime [+-]n

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

-mtime [+-]n

(m - modification) Wahr, wenn die aktuelle Datei zuletzt vor (mehr als / weniger als / genau) (n-1) bis n*24 Stunden geändert wurde.

-ctime [+-]n

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.

-newer datei

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.

-local

Wahr, wenn sich die aktuelle Datei physikalisch auf dem lokalen Rechner befindet.

-prune

Immer wahr. Wird dieser Ausdruck bearbeitet, werden keine Dateien oder Dateiverzeichnisse durchsucht, die unterhalb der aktuellen Hierarchiestufe liegen.

-xdev

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

-print

Immer wahr. Wird dieser Ausdruck bearbeitet, gibt find den Pfadnamen der aktuellen Datei auf die Standard-Ausgabe aus.

-exec kommando \;

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.

-ok kommando \;

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

-depth

Immer wahr. Wird dieser Ausdruck bearbeitet, dann bearbeitet find die Einträge eines Dateiverzeichnisses eher als das Verzeichnis selbst.

-follow

Immer wahr. Wird dieser Ausdruck bearbeitet, dann wird symbolischen Verweisen nachgegangen. Dieser Ausdruck sollte nicht mit der Option -type l kombiniert werden.

-mount

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!
Die Verknüpfungs-Operatoren sind nach Priorität in absteigender Reihenfolge geordnet.

\( ausdruck... \)

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.

! ausdruck

Negation: wahr, wenn der Ausdruck falsch ist.

ausdruck ausdruck

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
-exec kommando \;
dann wird das Kommando nur dann ausgeführt, wenn der erste Ausdruck wahr ist.

ausdruck -o 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
-exec kommando \;
dann wird das Kommando nur dann ausgeführt, wenn der erste Ausdruck falsch ist.

Fehler

Fehlermeldungen, die nicht zum Abbruch führen (Endestatus 0)

find: cannot read dir dvz : Permission denied
Sie haben für das Dateiverzeichnis dvz kein Leserecht. Das Dateiverzeichnis kann folglich nicht durchsucht werden. find bricht jedoch nach dieser Fehlermeldung nicht ab, sondern durchsucht die Dateiverzeichnisse, für die Sie die erforderlichen Zugriffsrechte (r-Bit) besitzen.


find: cannot access dvz/file : permission denied
Sie haben für das Dateiverzeichnis dvz kein Ausführrecht (x-Bit). Das Dateiverzeichnis kann folglich nicht durchsucht werden. find bricht jedoch nach dieser Fehlermeldung nicht ab, sondern durchsucht die Dateiverzeichnisse, für die Sie die erforderlichen Zugriffsrechte (r- und x-Bit) besitzen.


find: cannot open dvz : No such file or directory
Das Dateiverzeichnis dvz existiert nicht.

Fehlermeldungen, die zum Abbruch führen (Endestatus ungleich 0)

find: missing conjunction

Sie haben beim find-Aufruf die elementaren Ausdrücke nicht richtig miteinander verknüpft oder bei einem elementaren Ausdruck mehrere Argumente angegeben.


find: no action specified

Sie haben keine Aktion angegeben (print, exec, ok).


find: incomplete statement

Sie haben ein Kommando bei -exec oder -ok nicht mit entwertetem Strichpunkt \; abgeschlossen.


find: insufficient number of arguments

Sie haben zu wenige Argumente angegeben.


find: path-list predicate-list

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,

  • die im aktuellen Dateiverzeichnis oder einem Unterdateiverzeichnis stehen und

  • deren Name tmp ist.

$ find . -name tmp -print

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

$ find . -print -name tmp

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,

  • die im aktuellen Dateiverzeichnis oder Unterverzeichnissen stehen und

  • deren Name tmp ist oder auf .xx endet.

$ find . \( -name tmp -o -name '*.xx' \) -print

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.

$ find /usr/nikolaus ! -user nikolaus -print

Beispiel 4

Alle Dateien löschen,

  • deren Name tmp ist oder auf .xx endet und

  • auf die mehr als 7 Tage lang nicht zugegriffen wurde.

Vor dem Löschen soll abgefragt werden, ob die Datei tatsächlich gelöscht werden soll.

$ find / \( -name tmp -o -name '*.xx' \) -atime +7 -ok rm {} \;

Beispiel 5

Rekursives Drucken der Dateiverzeichnis-Struktur mit Auslassen aller SCCS-Dateiverzeichnisse.

$ find . -name SCCS -prune -o -print

Siehe auch

chmod, ln, test
stat() [4]