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