Next:  fold
Up:  Von GNU'sMuscheln 
 Previous:  file
 
 
   
  
  find sucht nach bestimmten Dateien
  find  [ Verzeichnis]
[- Option ...] [- Test ...] [- Aktion
...]
  find durchsucht eine oder mehrere
Verzeichnishierarchien nach Dateien mit bestimmten Eigenschaften und
führt damit bestimmte Aktionen aus. Die Eigenschaften können durch
Tests bestimmt werden.
Optionen, Tests und Aktionen können mit Operatoren zusammengefaßt werden.
 find bewertet für jede Datei in den Verzeichnishierarchien die
Optionen, Tests und Aktionen von links nach rechts, bis ein falscher
Wahrheitswert auftaucht oder die Kommandozeilenargumente zu Ende sind.
Das erste Argument, das mit einem `-', einer Klammer ` (',
` )', einem Komma ` ,' oder einem Ausrufezeichen ` !'
beginnt, wird als Anfang einer Option oder eines Tests interpretiert. Alle
Argumente davor werden als Verzeichnisnamen interpretiert.
Wenn kein Verzeichnis angegeben ist, wird das aktuelle Verzeichnis genommen.
Wenn keine Aktion angegeben ist, wird die Aktion `- print' ausgeführt.
Der Status von  find ist Null, wenn alle Aktionen erfolgreich waren, im
Fehlerfall ist der Status größer als Null.
Die Optionen bestimmen das allgemeine Verhalten des Kommandos und
beziehen sich nicht auf spezielle Dateien. Die Optionen sind immer wahr.
- -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
 - -depth
 -  bearbeitet den Inhalt jedes Verzeichnisses vor dem
Verzeichnis selbst
 - -follow
 -  folgt den symbolischen Links; diese Option schließt
`- noleaf' mit ein
 - -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, daß jedes Linux-Verzeichnis
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)
 
 
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 Linux-Dateisysteme 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,
daß 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  N
 -  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  N*24 Stunden verändert
 - -name  Muster
 -  der Name der Datei  paßt 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 paßt zum  Muster
 - -perm  Modus
 -  die Zugriffsrechte auf die Datei
  entsprechen exakt dem  Modus; der  Modus kann als
  Oktalzahl oder mit den bei  chmod auf Seite 
  beschriebenen Kennungen beschrieben werden, die Kennungen werden auf
  Modus ` 000' bezogen
 - -perm - Modus
 -  findet alle Dateien, bei denen
  mindestens alle Zugriffsrechte vom  Modus gesetzt sind
  (byteweise UND Maske)
 - -perm + Modus
 -  findet alle Dateien, bei denen
  mindestens ein Bit der Zugriffsrechte mit dem  Modus
  übereinstimmt (bitweise UND Maske)
 - -regex  Muster
 -  der Pfadname paßt 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
 
 
- -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 muß durch mindestens ein
Whitespace von der letzten Option getrennt werden (damit es vor
der Shell geschützt ist, muß es zusätzlich Quotiert 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
(siehe auch auf Seite 
)
 - -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 ` Y' 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 Backslash, 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
 - %C k
 -  das Datum der letzten Statusänderung im Format der  strftime-Funktion;
Parameter wie oben
 - %d
 -  die Höhe der Datei im Verzeichnisbaum; Null bedeutet, daß 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
 - %T k
 -  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' gesetzt ist;
  sonst falsch
 - -ls
 -  zeigt die gefundene Datei im Format von ` ls -dils' an
 
 
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
 
 
Die folgenden Beispiele zeigen typische Anwendungen des  find-Kommandos aus dem Aufgabenbereich der Systemverwalterin.
Im ersten Beispiel wird das gesamte Dateisystem nach  core-Files
durchsucht. Diese Speicherabzüge bleiben häufig nach Programmabstürzen
zurück. Um den dadurch unnütz belegten Festplattenplatz wieder nutzbar
zu machen, sollten diese Dateien in regelmäßigen Abständen gelöscht
werden. In dem Beispiel werden nur solche Dateien zum Löschen
vorgeschlagen, die länger als 5 Tage nicht geöffnet wurden. Auf diese
Weise wird verhindert, daß ein möglicherweise gerade zum debuggen
eines Programms benutztes  core-File dem Eigentümer ünter der
Hand weg'' gelöscht wird.
# find / -atime -5 -name "core*" -ok rm {} \;
< rm ... /home/she/core > ? n
< rm ... /usr/src/util-etc-2.1/core > ? y
< rm ... /usr/openwin/include/images/core_eye.icon > ? n
< rm ... /usr/openwin/include/images/coredoc.icon > ? n
# _
Im zweiten Beispiel wird das gesamte Dateisystem nach Dateien
durchsucht, die mit den Privilegien des Eigentümers ausgeführt werden.
Solche Programme sind immer ein potentielles Sicherheitsrisiko.
Deshalb sollte in einem öffentlichen System regelmäßig der Bestand an
solchen Dateien durchgesehen und auf Veränderungen geprüft werden.
# find / -type f -perm -4000 -exec ls -l {} \;
-r-sr-sr-x  1 daemon  daemon    12328 Aug 12 22:58 /usr/bin/lpq
-r-sr-sr-x  1 ruth    daemon    14048 Aug 12 22:58 /usr/bin/lpr
-r-sr-xr-x  1 uucp    daemon   123908 Mar 24  1993 /usr/bin/cu
-r-sr-xr-x  1 uucp    daemon    87044 Mar 24  1993 /usr/bin/uux
-r-sr-xr-x  1 uucp    daemon    87044 Mar 24  1993 /usr/bin/uucp
-r-sr-xr-x  1 uucp    daemon    37892 Mar 24  1993 /usr/bin/uuname
-r-sr-xr-x  1 uucp    daemon    99332 Mar 24  1993 /usr/bin/uustat
-rws-x-x  1 ruth    ruth      24352 Jan 16  1993 /bin/login
-rws-x-x  1 ruth    ruth      16464 Jan 16  1993 /bin/su
-rws-x-x  1 ruth    ruth      16864 Jan 16  1993 /bin/passwd
-rws-x-x  1 ruth    ruth      16292 Jan 16  1993 /bin/gpasswd
-rws-x-x  2 ruth    ruth      11176 Jan 16  1993 /bin/newgrp
-rws-x-x  1 ruth    ruth       9356 Jan 16  1993 /bin/chfn
-rws-x-x  1 ruth    ruth       8232 Jan 16  1993 /bin/chsh
-rws-x-x  1 ruth    ruth      16264 Jan 16  1993 /bin/chage
-rws-x-x  2 ruth    ruth      11176 Jan 16  1993 /bin/sg
--s-x-x  1 ruth    ruth      13316 Aug 13 07:14 /etc/traceroute
 Eric Decker, David MacKenzie, Jay Plett und Tim Wood
 
 
    
 
 
 
 
 
 Next:  fold
Up:  Von GNU'sMuscheln 
 Previous:  file