FIND(1)

BEZEICHNUNG
find - sucht in einer Verzeichnishierarchie nach Dateien

SYNTAX
find [-H] [-L] [-P] [Verzeichnis...] [Ausdruck]

BESCHREIBUNG
Diese Handbuchseite beschreibt die GNU Version von find. GNU find durchsucht eine oder mehrere Verzeichnishierarchien und bewertet dabei den Ausdruck von links nach rechts entsprechend den Regeln der Priorität (siehe Abschnitt OPERATOREN) bis das Ergebnis bekannt ist (die linke Seite ist falsch für UND Operatoren, wahr für ODER Operatoren). Anschließend führt find die Suche mit der nächsten Datei fort.

OPTIONEN
Die Optionen -H, -L und -P bestimmen den Umgang mit symbolischen Links. Darauf folgende Kommandozeilenparamter müssen die Datei- oder Verzeichnisnamen sein, die untersucht werden sollen.

Das erste Argument, das mit einem -, einer Klammer (, ), einem Komma , oder einem Ausrufezeichen ! beginnt, wird als Anfang eines Ausdrucks interpretiert, der bestimmt, wonach gesucht wird. Alle Argumente davor werden als Verzeichnisnamen angesehen.

Wenn kein Verzeichnis angegeben ist, wird das aktuelle Verzeichnis genommen. Wenn keine Aktion angegeben ist, wird die Aktion -print ausgeführt (es wird stattdessen empfohlen -print0 zu verwenden).

-P  Keinen symbolischen Links folgen. Dies ist das Standardverhalten. Wenn find eine Datei untersucht oder Informationen über diese ausgibt, und die Datei ein symbolischer Link ist, dann werden die Informationen von dem symbolischen Link selbst verwendet.

-L  Symbolischen Links folgen. Wenn find eine Datei untersucht oder Informationen über diese ausgibt, dann werden die Informationen von der Datei verwendet, auf die der symbolische Link verweist (es sei denn, der Link ist kaputt oder find nicht in der Lage ist, die Datei zu untersuchen, auf die der Link zeigt). Die Verwendung dieser Option impliziert die Option -noleaf. Wenn Sie später die Option -P verwenden, wird -noleaf immer noch Auswirkungen zeigen. Wenn -L aktiv ist und find einen symbolischen Link zu einem Unterverzeichnis während seiner Suche findet, wird das Unterverzeichnis durchsucht, auf das der symbolische Link zeigt.

    Wenn die Option in Kraft tritt, wird das Prädikat -type immer auf den Typ der Datei angewendet, auf die ein symbolischer Link zeigt, anstatt auf den Link selbst (es sei denn, der symbolische Link ist kaputt). Die Verwendung von -L bewirkt, dass die Prädikate -lname und -ilname immer logisch falsch zurückliefern.

-H  Keinen symbolischen Links folgen, es sei denn die Parameter in der Kommandozeile werden ausgewertet. Wenn find Dateien auswertet oder Informationen über diese ausgibt, werden die verwendeten Informationen vom symbolischen Link selbst benutzt werden. Die einzige Ausnahme dieses Verhaltens ist, wenn eine in der Kommandozeile angegebene Datei ein symbolischer Link ist und dem Link gefolgt werden kann. In dieser Situation werden die Informationen der Datei genommen, auf die der symbolische Link verweist. Die Informationen über den Link selbst dienen als Fall-Back für den Fall, dass die Datei, auf die der Link zeigt, nicht untersucht werden kann. Wenn -H aktiv ist und einer der Pfade in der Kommandozeile ein symbolischer Link zu einem Verzeichnis ist, werden die Inhalte dieses Verzeichnisses untersucht (wobei natürlich -maxdepth 0 das verhindern kann).

AUSDRÜCKE

Ein Ausdruck besteht aus Optionen (welche das allgemeine Verhalten der Kommandos bestimmen und immer wahr zurückgeben), Tests (welche wahr oder falsch zurückgeben) und Aktionen (welche wahr oder falsch zurückgeben). Optionen, Tests und Aktionen werden über Operatoren verknüpft. Wenn kein Operator explizit angeben ist wird der UND Operator -and verwendet. Wenn der Ausdruck keine andere Aktion als -prune enthält, wird mit allen Dateien, für welche der Ausdruck wahr ergibt, die Aktion -print durchgeführt.

  OPTIONEN

Alle Optionen geben immer logisch wahr zurück. Mit der Ausnahme von -follow und -daystart haben sie immer Auswirkungen und werden nicht erst dann verarbeitet, wenn ihre Position im Ausdruck erreicht wird. Daher sollten ist es für bessere Lesbarkeit besser, sie an den Anfang des Ausdrucks zu stellen. Eine Warnung wird ausgegeben, wenn Sie das nicht machen.

-daystart
    mißt die Zeiten für die -amin, -atime, -cmin, -ctime, -mmin und -mtime Eigenschaften vom Beginn des aktuellen Tages anstelle der letzten 24 Stunden. Diese Option betrifft nur die Tests, die weiter hinten in der Kommandozeile geschrieben sind.

-depth
    bearbeitet den Inhalt jedes Verzeichnisses vor dem Verzeichnis selbst.

-follow
    Veraltet. Verwenden Sie die Option -L stattdessen. Dereferenziert symbolische Links. Impliziert -noleaf. Wenn die Option -H oder -L nicht angegeben wird, ändert die Position von -follow das Verhalten des Prädikats -newer. Alle Dateien, die als Argumente von -newer aufgeszählt sind, werden dereferenziert, wenn es sich bei ihnen um symbolische Links handelt. Das gleiche gilt für -anewer und -cnewer. Genauso wird das Prädikat -type immer auf den Typ der Datei angewendet, auf den der symbolische Link zeigt und nicht auf den Link selbst. Die Verwendung von -follow hat zur Folge, dass die Prädikate -lname und -ilname immer logisch falsch zurückliefern.

-maxdepth Ebenen
    steigt bis zu der gegebenen Zahl von Ebenen im Verzeichnisbaum auf (in der Hierarchie ab); bei 0 Ebenen werden die Tests nur auf die in der Kommandozeile übergebenen Dateien und Verzeichnisnamen angewendet

-mindepth Ebenen
    steigt mindestens die gegebene Zahl von Ebenen im Verzeichnisbaum auf (in der Hierarchie ab); bei einer Ebene werden die in der Kommandozeile genannten Dateien und Verzeichnisnamen nicht bearbeitet

-noleaf
    erzwingt die Bearbeitung aller Verzeichniseinträge; normalerweise kann davon ausgegangen werden, dass jedes Linuxverzeichnis wenigstens zwei (harte) Links enthält: das Verzeichnis . ist ein Link auf das Verzeichnis selbst, und jedes Unterverzeichnis enthält den Eintrag .. als Link auf das Oberverzeichnis; wenn find bei der Untersuchung eines Verzeichnisses zwei Unterverzeichnisse weniger untersucht hat, als das Verzeichnis Links zählt, kann deshalb normalerweise die weitere Suche beendet werden

-version
    gibt die Versionsnummer auf die Standardfehlerausgabe

-xdev
    durchsucht keine Verzeichnisse in anderen Dateisystemen (auf anderen Partitionen)

  Tests
Alle numerischen Argumente können auf drei Arten angegeben werden:

    + N steht für alle Zahlen größer als N

    - N steht für alle Zahlen kleiner als N

    N   steht für genau N
Alle Tests werden auf die Dateien in den angegebenen Verzeichnissen einzeln angewendet. Die Tests liefern einen Wahrheitswert von 0 (Wahr), wenn der Test erfolgreich war.

Die Tests auf die erweiterten Zeitmarken (Zugriff und Erstellung) werden nur in solchen Verzeichnissen korrekt behandelt, die auf einem der neuen Linuxdateisysteme angesiedelt sind (e2fs, xiafs, new minix). Auf den anderen Dateisystemen wird nur das Datum der letzten Änderung zuverlässig getestet. Das Ergebnis der anderen Tests hängt davon ab, ob der letzte Zugriff bzw. die letzte Änderung so kurz zurückliegen, dass die veränderte I-Node noch im Arbeitsspeicher (Cache) ist. Dann können auch für die Dateien der alten Dateisysteme alle drei Zeitmarken unterschieden werden.

-amin N
    auf die Datei ist vor N Minuten zugegriffen worden

-anewer Referenzdatei
    auf die Datei ist vor weniger Zeit zugegriffen worden, als seit der letzten Veränderung der Referenzdatei vergangen ist; im Zusammenhang mit -follow tritt -anewer nur in Effekt, wenn -follow vor -anewer in der Kommandozeile steht

-atime N
    auf die Datei ist vor N*24 Stunden zugegriffen worden

-cmin N
    der Status der Datei wurde vor N Minuten geändert

-cnewer Referenzdatei
    der Status der Datei wurde vor weniger Zeit verändert, als seit der letzten Veränderung der Referenzdatei vergangen ist; zusammen mit -follow tritt -cnewer nur in Effekt, wenn -follow vor -cnewer in der Kommandozeile steht

-ctime N
    der Dateistatus wurde vor N*24 Stunden geändert

-empty
    die reguläre Datei oder das Verzeichnis ist leer

-false
    ist immer falsch

-fstype Typ
    die Datei ist in einem Dateisystem vom angegebenen Typ; unter anderem werden minix, msdos, ext und proc erkannt

-gid N
    die Datei gehört der Gruppe mit der Kennzahl N

-group Name
    die Datei gehört der Gruppe Name

-inum IN
    die Datei belegt die Inode mit der Nummer N

-links N
    die Datei hat N (harte) Links

-lname Muster
    die Datei ist ein symbolischer Link auf eine Datei oder ein Verzeichnis mit einem zum Muster passenden Namen

-mmin N
    der Inhalt der Datei wurde vor N Minuten verändert

-mtime N
    der Inhalt der Datei wurde vor IN*24 Stunden verändert

-name Muster
    der Name der Datei passt zu dem Muster

-newer Referenzdatei
    die Datei ist später verändert worden als die Referenzdatei; zusammen mit -follow tritt -newer nur in Effekt, wenn -follow vor -newer in der Kommandozeile steht

-nouser
    die Datei gehört keinem im System eingetragenen Benutzer

-nogroup
    die Datei gehört keiner im System angemeldeten Gruppe

-path Muster
    der Pfadname der Datei passt zum Muster"

-perm Modus
    die Zugriffsrechte auf die Datei entsprechen exakt dem Modus; der Modus kann als Oktalzahl oder mit den bei chmod(1) beschriebenen Kennungen beschrieben werden, die Kennungen werden auf Modus 000bezogen

-perm -Modus
    (mindestens) die Zugriffsrechte für den Modus sind gesetzt

-perm +Modus
    die Zugriffsrechte entsprechen höchstens dem Modus (oder sind weiter eingeschränkt)

-regex Muster
    der Pfadname passt zu dem regulären Ausdruck Muster

"size N[{c,k}]"
    die Datei belegt N Datenblöcke zu 512 Bytes, bzw. N Bytes und N Kilobytes mit nachgestelltem c oder k

-true
    ist immer wahr

-type C
    die Datei ist vom Typ C; folgende Typen werden unterschieden:

    b   gepufferte Gerätedatei für ein blockorientiertes Gerät

    c   ungepufferte Gerätedatei für ein zeichenorientiertes Gerät

    d   Verzeichnis

    p   benannte Pipeline (FiFo)

    f   normale Datei

    l   symbolischer Link

    s   Socket

-uid N
    die Kennziffer des Eigentümers ist N

-used N
    auf die Datei ist N Tage nach der letzten Änderung zugegriffen worden

-user Name
    die Datei gehört dem Anwender Name

-xtype C
    das gleiche wie -type für alle Dateien, die keine symbolischen Links sind; wenn die Datei ein symbolischer Link ist und die Option -follow nicht gesetzt ist, wird die Datei, auf die der Link zeigt, auf den Typ C geprüft; wenn die Option -follow gesetzt ist, ist der Test wahr, wenn C = l ist

  Aktionen

-exec Kommando;
    führt das Kommando aus; die Aktion ist wahr, wenn das Kommando einen Status von Null liefert; alle auf den Kommandonamen folgenden Argumente bis zu einem Semikolon ; werden als Kommandozeilenargumente für das Kommando interpretiert; das Semikolon kann nicht weggelassen werden, und es muss durch mindestens ein Whitespace von der letzten Option getrennt werden; die Konstruktion {} wird durch den Pfadnamen der Datei ersetzt; die Klammern und das Semikolon müssen in der Kommandozeile für find quotiert werden, damit sie nicht von der Shell bearbeitet werden

-fprint Ausgabedatei
    schreibt den Pfadnamen der getesteten Datei in die Ausgabedatei; wenn die Ausgabedatei nicht existiert, wird sie erzeugt, sonst wird sie erweitert; die Standardausgabe und die Standardfehlerausgabe werden als /dev/stdout und /dev/stderr angesprochen

-fprint0 Ausgabedatei
    schreibt den Namen der getesteten Datei in die Ausgabedatei und schließt die Ausgabe mit einem Nullbyte ab, wie -print0

-fprintf Ausgabedatei Format
    schreibt den Namen der getesteten Datei in die Ausgabedatei und benutzt dabei das Format mit Sonderzeichen wie bei printf

-ok Kommando;
    wie -exec, vor der Ausführung des Kommandos wird aber noch eine Bestätigung erwartet; nur eine Eingabe, die mit einem B oder einem y beginnt, führt zur Ausführung des Kommandos

-print
    gibt den vollständigen Pfadnamen der getesteten Datei auf die Standardausgabe

-print0
    gibt den Pfadnamen der getesteten Datei, von einem Nullbyte abgeschlossen, auf die Standardausgabe; auf diese Weise können auch Pfadnamen korrekt weiterverarbeitet werden, die ein Zeilenende enthalten

-printf Format
    gibt für die getestete Datei die Zeichenkette Format auf der Standardausgabe aus; Format kann verschiedene Sonderzeichen und Platzhalter enthalten, die von find bearbeitet werden:

    \a  Alarmton

    \b  Rückschritt

    \c  Abbruch der Ausgabe

    \f  Seitenvorschub

    \n  Zeilenvorschub

    \r  Wagenrücklauf

    \t  horizontaler Tabulator

    \v  vertikaler Tabulator

    \\  der Backslash selbst

ein Backspace gefolgt von irgendeinem anderen Zeichen wird als normales Zeichen interpretiert und einfach ausgegeben

    %%  das Prozentzeichen selbst

    %a  die Zeit des letzten Zugriffs auf die Datei, in dem Format der ctime Funktion

    %A k
        die Zeit des letzten Zugriffs auf die Datei, in dem von k bestimmte Format; k hat dabei das gleiche Format wie der entsprechende Parameter der strftime Funktion in C:

        @   Sekunden seit dem 1.1.1970 0 Uhr GMT

        H   Stunde (00 bis 23)

        I   Stunde (01 bis 12)

        k   Stunde (0 bis 23)

        l   Stunde (1 bis 12)

        M   Minute (00 bis 59)

        p   PM oder AM

        r   Zeit, 12 Stunden (hh:mm:ss: AM/PM)

        S   Sekunden (00 bis 61)

        T   Zeit, 24 Stunden (hh:mm:ss)

        X   Zeit (H:M:S)

        Z   Zeitzone, oder nichts

        a   abgekürzter Wochentag

        A   ausgeschriebener Wochentag

        b   abgekürzter Monatsname

        B   ausgeschriebener Monatsname

        c   Datum und Zeit

        d   Tag im Monat

        D   Datum (mm/dd/yy)

        h   das gleiche wie b

        j   der Tag im Jahr

        m   die Zahl des Monats

        U   die Nummer der Woche, Sonntag als erster Wochentag

        w   die Zahl des Wochentags

        W   die Nummer der Woche, Montag als erster Wochentag

        x   Datum (mm/dd/yy)

        y   die letzten beiden Stellen der Jahreszahl

        Y   die Jahreszahl

    %b  die Dateigröße in 512 Byte Blöcken (aufgerundet)

    %c  das Datum der letzten Statusänderung im Format der C ctime Funktion

    %Ck das Datum der letzten Statusänderung im Format der BR strftime " Funktion; Parameter wie oben"

    %d  die Höhe der Datei im Verzeichnisbaum; Null bedeutet, dass die Datei Kommandozeilenargument ist

    %f  der Name der getesteten Datei, ohne Verzeichnisse

    %g  der Gruppenname der getesteten Datei oder die Kennzahl, wenn die Gruppe nicht eingetragen ist

    %G  die Gruppenkennzahl

    %h  die Verzeichnisnamen des Pfadnamen der getesteten Datei

    %H  das Kommandozeilenargument (Test), mit dem die Datei gefunden wurde

    %i  die Nummer der Inode der getesteten Datei

    %k  die aufgerundete Größe der getesteten Datei in Kilobytes

    %l  das Objekt, auf die ein symbolischer Link zeigt; leer, wenn die getestete Datei kein symbolischer Link ist

    %m  die Zugriffsrechte als Oktalzahl

    %n  die Anzahl der harten Links auf die getestete Datei

    %p  der Pfadname der Datei

    %P  der Pfadname und das Kommandozeilenargument (Test), mit dem die Datei gefunden wurde

    %s  die Größe der getesteten Datei in Bytes

    %t  die Zeit der letzten Änderung, im ctime Format

    %Tk die Zeit der letzten Änderung, im strftime Format (siehe oben)

    %u  der Name des Eigentümers der getesteten Datei oder die Kennzahl, wenn der Benutzer nicht eingetragen ist

    %U  die Benutzerkennzahl des Eigentümers der getesteten Datei

-prune
    wahr, wenn die Option -depth nicht angegeben ist; sonst falsch. Wenn die Datei ein Verzeichnis ist, wird nicht in dieses hinabgestiegen.
    falsch, wenn die Option -depth angegeben ist, hat keine Auswirkungen.

-ls zeigt das Verzeichnis in dem die getestete Datei gefunden wurde mit ls -dils an

  Operatoren
Die Optionen, Tests und Aktionen können mit Operatoren verknüpft werden. Die Bearbeitung erfolgt prinzipiell von links nach rechts.

( Ausdruck )
    die Klammern fassen den Ausdruck zu einer Operation zusammen

! Ausdruck
    ist wahr, wenn der Ausdruck falsch ist

-not Ausdruck
    ist ebenfalls wahr, wenn der Ausdruck falsch ist

Ausdruck1 Ausdruck2
    UND Verknüpfung; wenn Ausdruck1 wahr ist, wird Ausdruck2 bewertet (ausgeführt)

Ausdruck1 -a Ausdruck2
    auch eine UND Verknüpfung

Ausdruck1 -and Ausdruck2
    auch eine UND Verknüpfung

Ausdruck1 -o Ausdruck2
    ODER Verknüpfung; Ausdruck2 wird bewertet (ausgeführt), wenn Ausdruck1 falsch ist

Ausdruck1 -or Ausdruck2
    auch eine ODER Verknüpfung

Ausdruck1 , Ausdruck2
    Liste; beide Ausdrücke werden immer bewertet (ausgeführt); der Wahrheitswert des gesamten Ausdrucks entspricht dem von Ausdruck2

BEISPIELE
find /tmp -name core -type f -print | xargs /bin/rm -f
Finde Dateien mit dem Namen core in oder unterhalb des Verzeichnisses /tmp und lösche diese. Achtung, diese Aktion schlägt fehl falls die Dateinamen Zeilenvorschübe, einfache oder doppelte Anführungszeichen oder Leerzeichen enthalten.

EXIT STATUS
Der Status von find ist Null, wenn alle Aktionen erfolgreich waren, im Fehlerfall ist der Status größer als Null.

SIEHE AUCH
das LunetIX Linuxhandbuch, locate(1), locatedb(5), updatedb(1), xargs(1), fnmatch(3), regex(7), stat(2), lstat(2), ls(1), printf(3), strftime(3), ctime(3), Finding Files (on-line im Info-Dokument oder gedruckt),

HISTORY
Seit findutils-4.2.2 stimmen Shell-Metazeichen ('*'. '?' oder '[]' zum Beispiel), die in Muster für Dateinamen verwendet werden, einen führenden '.', denn die Interpretation 126 von IEEE POSIX erfordert dieses.

AUTOREN
Eric Decker, David MacKenzie, Jay Plett und Tim Wood