Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ find(1) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

chmod(1)

cpio(1)

ln(1)

sh(1)

test(1)

stat(2)

fs(4)

find(1)                                                             find(1)

NAME
     find - Verzeichnisse durchsuchen

SYNTAX
     find verzeichnis ... ausdruck

BESCHREIBUNG
     find durchsucht Verzeichnisse und deren Unterverzeichnisse nach
     Dateien, die angegebene Bedingungen erfüllen. Die gefundenen Dateien
     können Sie mit einem Kommando bearbeiten und/oder sich ihre Namen aus-
     geben lassen.

     find sucht nicht nur nach einfachen Dateien, sondern auch nach Ver-
     zeichnissen, Gerätedateien oder FIFOs.

ARGUMENTE
     verzeichnis
          Name des Verzeichnisses, das durchsucht werden soll. find durch-
          sucht dieses Verzeichnis sowie rekusiv alle seine Unterverzeich-
          nisse, sofern Sie für die Verzeichnisse 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 ele-
          mentaren 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
          Verzeichnisse bzw. Unterverzeichnisse steht, von links nach
          rechts ab. Ein elementarer Ausdruck ist für eine Datei entweder
          wahr oder falsch. Vom Wahrheitswert des Ausdrucks und dem darauf-
          folgenden 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 \;
          -cpio gerät

          sind keine Bedingungen. Sie bewirken, daß eine Aktion ausgeführt
          wird, z. B. Ausgeben des 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 Aus-
          drücke angeben, wird standardmäßig -print ausgeführt. Innerhalb
          von ausdruck müssen Sie Sonderzeichen der Shell entwerten, so daß
          die Shell sie nicht interpretiert, sondern an find übergibt.




Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

find(1)                                                             find(1)

   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 muß eine solche Option vor der Option -print
     (siehe unten) angegeben werden. Ansonsten werden alle Dateien ausgege-
     ben.

     Der Parameter n steht für eine Dezimalzahl; +n bedeutet mehr als n, -n
     bedeutet weniger als n, und n bedeutet genau n.

     -name muster
          Wahr, wenn die aktuelle Datei den Namen muster hat.

          Für muster können Sie die üblichen Sonderzeichen der Shell zur
          Dateinamen-Generierung verwenden, müssen dann aber muster in
          Hochkommas einschließen, z. B. find /usr/adam -name 'gruppe.*'
          [siehe specialchar(5)]. Sie dürfen nur einfache Dateinamen ange-
          ben (nicht erlaubt ist z. B. text/tmp).

     -perm modus
          Wahr, wenn die aktuelle Datei die durch modus beschriebenen
          Zugriffsrechte hat [siehe chmod(1)]. Um die Zugriffsrechte zu
          vergleichen, erzeugt find eine Schablone ohne Zugriffsbits und
          modifiziert diese entsprechend den Angaben bei modus. Geben Sie
          vor modus ein Minuszeichen an, so werden nur die Bits mit den
          Zugriffsrechten verglichen, die in modus beschrieben sind, und
          der Ausdruck ist wahr, wenn sie übereinstimmen.

          Um Fehlinterpretationen zu vermeiden, darf modus selbst nicht mit
          - beginnen, d. h. Sie müssen immer explizit angeben, wem Sie
          Zugriffsrechte entziehen wollen.

     -perm oktalzahl
          Wahr, wenn die aktuelle Datei die Zugriffsrechte oktalzahl hat
          [siehe chmod(1)]. Geben Sie vor oktalzahl ein Minuszeichen an, so
          werden nur die Bits mit den Zugriffsrechten verglichen, die in
          oktalzahl gesetzt sind, und der Ausdruck ist wahr, wenn sie über-
          einstimmen.












Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

find(1)                                                             find(1)

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

          f  für einfache Datei (ordinary file)

          d  für Verzeichnis (directory)

          b  für blockorientierte Gerätedatei (block special file)

          c  für zeichenorientierte Gerätedatei (character special file)

          l  für symbolische Verweise (symbolic links)

          p  für FIFO (named pipe)

     -fstype name
          Wahr, wenn das Dateisystem, zu dem die aktuelle Datei gehört, vom
          Typ name ist, wobei name sein kann:

          hs, nfs, ufs oder vxfs (sowie einige Spezial-Dateisysteme wie
          proc oder fdfs).

     -links [±]n
          Wahr, wenn auf die aktuelle Datei (mehr als/weniger als) n Ver-
          weise 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.

     -nouser
          Wahr, wenn die aktuelle Datei einer Benutzerkennung gehört, die
          nicht in der Datei /etc/passwd als Kennung eingetragen ist.

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








Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

find(1)                                                             find(1)

     -size [±]n[c]

          c nicht angegeben:

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

          c angegeben:

          Wahr, wenn die aktuelle Datei (mehr/weniger als) n Bytes belegt.

     -atime [±]n
          (a - access) Wahr, wenn auf die aktuelle Datei zuletzt vor (mehr
          als/weniger als) n * 24 Stunden zugegriffen wurde. Die Zugriffs-
          zeit der Verzeichnisse vom bzw. im durchsuchten Verzeichnis wird
          von find selbst verändert.

     -mtime [±]n
          (m - modification) Wahr, wenn die aktuelle Datei zuletzt vor
          (mehr als/weniger als) n * 24 Stunden geändert wurde.

     -ctime [±]n
          Wahr, wenn der Index-Eintrag (inode) der aktuellen Datei zuletzt
          vor (mehr als/weniger als) 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 physisch auf dem lokalen Rech-
          ner befindet.

     -prune
          Immer wahr. Wird dieser Ausdruck bearbeitet, werden keine Dateien
          oder Verzeichnisse durchsucht, die unterhalb von muster liegen.
          Siehe -name muster und Beispiel 5 und 6.

          Wird zusätzlich -depth angegeben, ist -prune wirkungslos.














Seite 4                      Reliant UNIX 5.44               Gedruckt 11/98

find(1)                                                             find(1)

   Elementare Ausdrücke, die Aktionen bewirken

     -print
          Immer wahr. Wird dieser Ausdruck bearbeitet, gibt find den Pfad-
          namen der aktuellen Datei auf die Standardausgabe aus.

     -exec kommando \;
          kommando wird ausgeführt, sobald dieser Ausdruck bearbeitet wird.

          kommando müssen Sie mit einem Leerzeichen und einem entwerteten
          Semikolon \; 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 Ende-
          status 0 liefert. Der Wahrheitswert ist von Bedeutung, wenn die-
          ser 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 Kom-
          mando wird nur dann ausgeführt, wenn Sie mit dem Zeichen bzw. der
          Zeichenkette antworten, die in der aktuell gültigen Umgebung "Ja"
          bedeutet (siehe Umgebungsvariable LANG).

     -cpio gerät
          Immer wahr. Wird dieser Ausdruck bearbeitet, gibt find den Inhalt
          der aktuellen Datei im cpio-Format auf das angegebene gerät aus
          [siehe cpio(1)].

          Diese Option ist überholt. Sie wird in zukünftigen Versionen
          nicht mehr unterstützt.

   Ausdrücke, die die Arbeitsweise von find beeinflussen

     -depth
          Immer wahr. Wird dieser Ausdruck bearbeitet, dann bearbeitet find
          die Einträge eines Verzeichnisses eher als das Verzeichnis
          selbst. Dies kann hilfreich sein, wenn find in Verbindung mit dem
          Kommando cpio verwendet wird, um Dateien zu übertragen, für deren
          Verzeichnis Sie kein Schreibrecht besitzen.

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

          Wenn Sie find zusammen mit dem Kommando cpio anwenden, dann
          beachten Sie folgendes: Wenn Sie cpio mit der Option -L aufrufen,
          müssen Sie bei find den Ausdruck -follow angeben und umgekehrt.
          Sonst können unerwünschte Effekte auftreten.




Seite 5                      Reliant UNIX 5.44               Gedruckt 11/98

find(1)                                                             find(1)

     -mount
          Immer wahr. Wird dieser Ausdruck bearbeitet, dann beschränkt find
          seine Suche auf das Dateisystem, in dem sich das angegebene Ver-
          zeichnis befindet.

     -nonfs
          Ist diese Option gesetzt, läuft find nicht in Verzeichnisse, die
          mit NFS eingehängt worden sind. Wird find mit dieser Option in
          einem NFS-Verzeichnis gestartet, beendet es sich ohne Aktion.

     -xdev
          Wie -mount.

   Ausdrücke verknüpfen

     Die oben beschriebenen Ausdrücke können Sie wie folgt miteinander ver-
     knüpfen; beachten Sie die Leerzeichen vor und nach den Operatoren!

     Die Verknüpfungs-Operatoren sind nach Priorität in absteigender Rei-
     henfolge geordnet.

     \( ausdruck... \)
          Klammern fassen mehrere Ausdrücke zusammen. Die Klammern müssen
          mit einem Gegenschrägstrich \ entwertet werden, da sie eine Son-
          derbedeutung für die Shell haben.

     ! ausdruck
          Negation: wahr, wenn der Ausdruck falsch ist.

     ausdruck ausdruck oder ausdruck -a 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 Aus-
          druck 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 zwei-
          ten Ausdruck nicht.







Seite 6                      Reliant UNIX 5.44               Gedruckt 11/98

find(1)                                                             find(1)

          Beispiel:

          Ist der zweite Ausdruck

               -exec kommando \;

          dann wird das Kommando nur dann ausgeführt, wenn der erste Aus-
          druck falsch ist.

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

     find: Cannot read dir dir: Permission denied

     Sie haben für das Verzeichnis dir kein Leserecht. Das Verzeichnis kann
     folglich nicht durchsucht werden. find bricht jedoch nach dieser Feh-
     lermeldung nicht ab, sondern durchsucht die Verzeichnisse, für die Sie
     die erforderlichen Zugriffsrechte (r-Bit) besitzen.

     find: Cannot access dir/datei: Permission denied

     Sie haben für das Verzeichnis dir kein Ausführrecht (x-Bit). Das Ver-
     zeichnis kann folglich nicht durchsucht werden. find bricht jedoch
     nach dieser Fehlermeldung nicht ab, sondern durchsucht die Verzeich-
     nisse, für die Sie die erforderlichen Zugriffsrechte (r- und x-Bit)
     besitzen.

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

     find: error while searching through/below dir: No such file or directory

     Das Verzeichnis dir 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, cpio).

     find: incomplete statement

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





Seite 7                      Reliant UNIX 5.44               Gedruckt 11/98

find(1)                                                             find(1)

     find: insufficient number of arguments

     Sie haben zu wenige Argumente angegeben.

     find: path-list predicate-list

     Sie haben vergessen, die Pfadliste anzugeben.

INTERNATIONALE UMGEBUNG
     Die Umgebungsvariable LCMESSAGES bestimmt die Sprache der Meldungs-
     texte.

     Wenn Sie Dateinamen in regulären Ausdrücken verwenden (geklammerte
     Dateinamensmuster wie z. B. find . -name [[=a=]]* -print), bestimmt
     LCCOLLATE die Bedeutung von Zeichenbereichen, Äquivalenzklassen und
     Zeicheneinheiten, die Umgebungsvariable

     LCCTYPE die Bedeutung von Zeichenklassen.

     Wenn LCMESSAGES, LCCOLLATE oder LCCTYPE nicht oder als leere Zei-
     chenkette definiert ist, wird der Wert von LANG als Standardwert für
     die jeweils nicht gesetzte oder leere Variable herangezogen. Ist auch
     LANG nicht oder als leere Zeichenkette definiert, verhält sich das
     System so, als wäre es nicht internationalisiert.

     Hat eine der Variablen für die internationale Umgebung einen ungülti-
     gen Wert, verhält sich das System so, als wäre keine Variable gesetzt.

     Die Umgebungsvariable LCALL bestimmt die gesamte internationale Umge-
     bung. LCALL hat Vorrang vor allen anderen Umgebungsvariablen im
     Bereich der Internationalisierung.

BEISPIELE
     Beispiel 1

     Arbeitsweise von find - ein einfaches Beispiel:

     Die Pfadnamen aller Dateien ausgeben,

     -  die im aktuellen Verzeichnis oder einem Unterverzeichnis 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 Aus-
     druck -print, d. h., find gibt den Pfadnamen aus. Andernfalls bearbei-
     tet find den Ausdruck -print nicht, d. h. find gibt nichts aus.



Seite 8                      Reliant UNIX 5.44               Gedruckt 11/98

find(1)                                                             find(1)

     Beachten Sie die Reihenfolge: Wenn Sie statt dessen

     $ 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 Verzeichnis 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 bear-
     beitet 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 Verzeichnis /usr/nikolaus und den Unterverzeichnissen
     ausgeben, deren Eigentümer nicht nikolaus ist.

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









Seite 9                      Reliant UNIX 5.44               Gedruckt 11/98

find(1)                                                             find(1)

     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 Verzeichnis-Struktur mit Auslassen aller SCCS-
     Verzeichnisse.

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

     Beispiel 6

     Rekursives Drucken der Verzeichnis-Struktur mit Auslassen aller SCCS-
     Verzeichnisse, aber mit Anzeige des Verzeichnisnamens SCCS.

     find . -print -name SCCS -prune

DATEIEN
     /etc/group
          Datei mit Gruppennamen

     /etc/passwd
          Datei mit Benutzerkennungen

SIEHE AUCH
     chmod(1), cpio(1), ln(1), sh(1), test(1), stat(2), fs(4).


















Seite 10                     Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026