Provided by:
manpages-de_0.10-1_all 
BEZEICHNUNG
find - in einer Verzeichnishierarchie nach Dateien suchen
"UBERSICHT
find [-H] [-L] [-P] [-D Fehlersuchoptionen] [-Olevel] [Pfad ]
[Ausdruck]
BESCHREIBUNG
Diese Handbuchseite beschreibt die GNU Version von find. GNU-find
durchsucht die Verzeichnisbaume, die seinen Ursprung bei den
angegebenen Dateinamen haben und wertet dabei den Ausdruck von links
nach rechts entsprechend der Operatorenrangfolge aus (siehe Abschnitt
OPERATOREN) bis das Ergebnis ermittelt ist (die linke Seite falsch ist
fur UND-Operatoren und wahr fur ODER-Operatoren). AnschlieBend fahrt
find mit der nachsten Datei fort.
Falls Sie find in einem Umfeld benutzen, in dem Sicherheit wichtig ist
(zum Beispiel, um Verzeichnisse zu durchsuchen, die fur andere Anwender
schreibbar sind), sollten Sie die das Kapitel >>Security
Considerations<< der Findutils-Dokumentation lesen, die Finding Files
heiBt und den Findutils beigefugt ist. Dieses Dokument enthalt auBerdem
mehr Einzelheiten und Erorterungen als diese Handbuchseite, so dass Sie
es als eine nutzlichere Informationsquelle empfinden konnten.
OPTIONEN
Die Optionen -H, -L und -P steuern den Umgang mit symbolischen Links.
Darauf folgende Befehlszeilenparameter werden als zu untersuchende
Datei- oder Verzeichnisnamen betrachtet, bis ein Parameter mit einem
>>-<< beginnt oder ein >>(<< oder >>!<<, ist. Solche und alle folgenden
Parameter werden als Ausdruck interpretiert, der beschreibt, wonach
gesucht werden soll. Wenn kein Pfad angegeben wurde, wird das aktuelle
Verzeichnis genommen. Wenn kein Ausdruck angegeben ist, wird der
Ausdruck -print benutzt (aber Sie sollten vermutlich sowieso in
Betracht ziehen, stattdessen -print0 zu verwenden).
Dieses Handbuch spricht von >>Optionen<< innerhalb einer Liste von
Ausdrucken. Diese Optionen steuern das Verhalten von find, werden aber
direkt nach dem letzten Pfadnamen angegeben. Die funf >>echten<<
Optionen -L, -P, -D und -O mussen wenn dann vor dem ersten Pfadnamen
erscheinen. AuBerdem kann ein doppeltes Minuszeichen -- benutzt werden,
um zu signalisieren, dass die verbleibenden Argumente keine Optionen
sind (obwohl es im Allgemeinen sicherer ist, wenn Sie dafur sorgen,
dass alle Startpunkte entweder mit >>./<< oder >>/<< beginnen, falls
Sie Platzhalter in der Liste der Startpunkte verwenden).
-P keinen symbolischen Links folgen. Dies ist das
Standardverhalten. Wenn find eine Datei untersucht oder
Informationen uber diese ausgibt und die Datei ein symbolischer
Link ist, dann sollen die Informationen des symbolischen Links
selbst verwendet werden.
-L symbolischen Links folgen. Wenn find eine Datei untersucht oder
Informationen uber diese ausgibt, dann sollten die Informationen
der Datei verwendet werden, auf die der symbolische Link
verweist, nicht die des Links selbst (es sei denn, der
symbolische Link ist kaputt oder find nicht in der Lage, die
Datei zu untersuchen, auf die der Link zeigt). Die Verwendung
dieser Option impliziert die Option -noleaf. Wenn Sie spater die
Option -P verwenden, wird -noleaf immer noch Auswirkungen haben.
Wenn -L aktiv ist und find wahrend seiner Suche einen
symbolischen Link zu einem Unterverzeichnis vorfindet, wird das
Unterverzeichnis durchsucht, auf das der symbolische Link zeigt.
Wenn die Option -L in Kraft ist, wird das Pradikat -type immer
auf den Typ der Datei angewandt, 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
Pradikate -lname und -ilname immer falsch zuruckliefern.
-H keinen symbolischen Links folgen, es sei denn, die Parameter in
der Befehlszeile werden ausgewertet. Wenn find Dateien
untersucht oder Informationen uber diese ausgibt, sollen die
verwendeten Informationen vom symbolischen Link selbst benutzt
werden. Die einzige Ausnahme dieses Verhaltens ist, wenn eine in
der Befehlszeile 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 (das bedeutet, dass dem Link gefolgt wird). Die
Informationen uber den Link selbst dienen als Ruckgriff fur den
Fall, dass die Datei, auf die der symbolische Link verweist,
nicht untersucht werden kann. Wenn -H in Kraft ist und einer der
Pfade, die auf der Befehlszeile angegeben wurden, ein
symbolischer Link zu einem Verzeichnis ist, werden die Inhalte
dieses Verzeichnisses untersucht (was naturlich >>-maxdepth 0<<
verhindern wurde).
Falls mehr als eine der Optionen -H, -L und -P angegeben ist, setzt
jedes die anderen auBer Kraft; das letzte, das auf der Befehlszeile
erscheint, gilt. Die Option -P ist die Voreinstellung. Wenn weder -H
noch -L angegeben wurden, ist es, als ware dies angegeben worden.
GNU-find fragt oft Datei-Informationen wahrend der Verarbeitung der
Befehlszeile selbst ab, bevor irgendeine Suche begonnen hat. Diese
Optionen beeinflussen auch, wie diese Argumente verarbeitet werden.
Insbesondere gibt es einige Tests, die Dateien auf der Befehlszeile mit
einer aktuell betrachteten Datei vergleichen. Die Datei, die auf der
Befehlszeile angegeben wird, wird auf jeden Fall untersucht und einige
Ihrer Eigenschaften werden gespeichert. Falls die genannte Datei ein
symbolischer Link ist und die Option -P in Kraft ist (oder falls weder
-H noch -L angegeben wurden), wird die fur den Vergleich benutzte
Information aus den Eigenschaften des symbolischen Links genommen.
Anderenfalls wird sie aus den Eigenschaften der Datei genommen, auf die
der Link verweist. Falls find dem Link nicht folgen kann (zum Beispiel,
weil es nicht uber ausreichende Rechte verfugt oder der Link auf eine
nicht exisitierende Datei verweist), werden die Eigenschaften des Links
selbst benutzt.
Wenn die Optionen -H oder -L in Kraft sind, wird jeder symbolische Link
als Argument von -newer dereferenziert und der Zeitstempel wird von der
Datei genommen, auf die der symbolische Link verweist. Die gleichen
Erwagungen gelten fur -newerXY, -anewer und -cnewer.
Die Option -follow hat ahnliche Auswirkungen wie -L, obwohl sie an dem
Punkt in Kraft tritt, an dem sie erscheint (sprich, wenn -L nicht
benutzt wird, aber -follow, werden alle symbolischen Links, die nach
-follow auf der Befehlszeile erscheinen, vorher dereferenziert).
-D Debug-Optionen
Diagnoseinformationen ausgeben; dies kann hilfreich sein, um
Probleme zu diagnostizieren, warum find nicht das tut, was Sie
mochten. Die Liste der Debug-Optionen sollte durch Kommas
getrennt sein. Kompatibilitat der Debug-Optionen ist zwischen
den unterschiedlichen Versionen der Findutils nicht
gewahrleistet. Um eine vollstandige Liste der gultigen Optionen
zu erhalten, lesen Sie die Ausgabe von find -D help. Gultige
Debug-Optionen sind unter anderem:
help Erklart die Debugging-Optionen
tree zeigt den Ausdrucksbaum in seiner originalen und
optimierten Form
stat meldet, wenn Dateien mit den Systemaufrufen stat und
lstat untersucht werden. Das Programm find versucht, die
Anzahl solcher Aufrufe zu minimieren.
opt gibt Diagnoseinformationen bezuglich der Optimierung des
Ausdrucksbaums aus; siehe die Option -O.
rates gibt eine Zusammenfassung aus, die angibt, wie oft jedes
Pradikat erfolgreich war oder fehlschlug.
-Olevel
aktiviert Abfragenoptimierung. Das Programm find ordnet Tests
neu an, um die Ausfuhrung zu beschleunigen, ohne das
Gesamtergebnis zu andern; das heiBt, Pradikate mit
Seiteneffekten werden im Gegensatz zu anderen nicht neu
angeordnet. Die Optimierungen die auf jeder Optimierungsstufe
durchgefuhrt werden, sind wie folgt.
0 entspricht der Optimierungsstufe 1
1 Dies ist die Standardoptimierungsstufe und entspricht dem
traditionellen Verhalten. Ausdrucke werden neu
angeordnet, so dass Tests, die nur auf den Namen der
Dateien basieren (zum Beispiel -name und -regex) zuerst
durchgefuhrt werden.
2 Irgendwelche -type- oder -xtype-Tests werden nach allen
Tests, die nur auf Dateinamen basieren, aber vor Tests,
die Informationen aus dem Inode benotigen, durchgefuhrt.
Auf vielen modernen Versionen von Unix werden Dateitypen
durch readdir() zuruckgegeben und daher sind diese
Pradikate schneller auszuwerten als Pradikate, die zuerst
Stat fur die Datei ausfuhren mussen.
3 Auf dieser Optimierungsstufe ist der vollstandig
kostenbasierte Optimierer aktiviert. Die Reihenfolge der
Tests wird geandert, so dass gunstige (d.h. schnelle)
Tests zuerst und die teureren spater durchgefuhrt werden,
falls notig. Innerhalb jeder Kostenebene werden Pradikate
fruher oder spater ausgewertet, je nachdem, ob sie
wahrscheinlich erfolgreich sein werden oder nicht. Fur -o
werden Pradikate, die wahrscheinlich erfolgreich sind,
fruher ausgewertet und fur -a werden Pradikate die
wahrscheinlich fehlschlagen fruher ausgewertet.
Der kostenbasierte Optimierer hat eine feste Vorstellung davon,
wie wahrscheinlich ein gegebener Test erfolgreich ist. In
einigen Fallen tragt die Wahrscheinlichkeit einer bestimmten
Eigenheit des Tests Rechnung (zum Beispiel wird von -type f
angenommen, dass es eher erfolgreich ist, als -type c). Der
kostenbasierte Optimierer wird derzeit untersucht. Falls er
nicht wirklich die Leistung von find verbessert, wird er wieder
entfernt. Im umgekehrten Fall werden Optimierungen, die
beweisen, dass sie zuverlassig, robust und effektiv sind, im
Lauf der Zeit auf niedrigeren Optimierungsstufen aktiviert. Das
Standardverhalten (d.h. Optimierungsstufe 1) wird jedoch nicht
in der 4.3.x-Veroffentlichungsserie geandert. Die Test-Suite
Findutils fuhrt all die Tests auf find auf jeder
Optimierungsstufe aus und stellt sicher, dass das Ergebnis das
Gleiche ist.
AUSDR"UCKE
Der Ausdruck besteht aus Optionen (die nur das allgemeine Verhalten der
Operationen bestimmen, aber nicht die Verarbeitung einer bestimmten
Datei beeinflussen und immer wahr zuruckgeben), Tests (die ein wahr
oder falsch zuruckgeben) und Aktionen (die Seiteneffekte haben und wahr
oder falsch zuruckgeben), jeweils durch Operatoren getrennt. Wenn der
Operator weggelassen wird, wird -and angenommen.
Wenn der Ausdruck keine andere Aktion als -prune enthalt, wird fur alle
Dateien, fur welche der Ausdruck wahr ergibt, die Aktion -print
durchgefuhrt.
OPTIONEN
Alle Optionen geben immer wahr zuruck. Mit der Ausnahme von -daystart,
-follow und -regextype beeinflussen sie alle Tests einschlieBlich
derer, die vor der Option angegeben sind. Dies ruhrt daher, dass die
Optionen verarbeitet werden, wenn die Befehlszeile ausgewertet wird,
wohingegen die Tests nichts tun, bis Dateien untersucht werden. Die
Optionen -daystart, -follow und -regextype unterscheiden sich in dieser
Hinsicht und beeinflussen nur nur Tests, die spater auf der
Befehlszeile erscheinen. Daher ist es fur die Lesbarkeit besser, sie an
den Anfang des Ausdrucks zu stellen. Eine Warnung wird ausgegeben, wenn
Sie das nicht tun.
-d ein Synonym fur -depth, fur die Kompatibilitat mit FreeBSD,
NetBSD, MacOS X und OpenBSD.
-daystart
misst Zeiten (fur -amin, -atime, -cmin, -ctime, -mmin und
-mtime) vom Beginn des aktuellen Tages anstelle der letzten 24
Stunden. Diese Option beeinflusst nur die Tests, die weiter
hinten in der Befehlszeile erscheinen.
-depth bearbeitet den Inhalt jedes Verzeichnisses vor dem Verzeichnis
selbst. Die Aktion -delete impliziert ebenfalls -depth.
-follow
missbilligt; verwenden Sie stattdessen die Option -L;
dereferenziert symbolische Links; impliziert -noleaf. Die Option
-follow beeinflusst nur jene Tests, die nach ihr auf der
Befehlszeile erscheinen. Wenn die Option -H oder -L nicht
angegeben wird, andert die Position von -follow das Verhalten
des Pradikats -newer. Alle Dateien, die als Argumente von -newer
aufgezahlt werden, werden dereferenziert, wenn es sich bei ihnen
um symbolische Links handelt. Das gilt auch fur -anewer und
-cnewer. Ahnlich wird das Pradikat -type immer auf den Typ der
Datei angewandt, auf den der symbolische Link zeigt und nicht
auf den Link selbst. Die Verwendung von -follow hat zur Folge,
dass die Pradikate -lname und -ilname immer falsch
zuruckliefern.
-help, --help
gibt eine Zusammenfassung der Verwendung von find aus und wird
beendet
-ignore_readdir_race
Normalerweise wird find eine Fehlermeldung ausgeben, wenn das
Ausfuhren von Stat fur eine Datei fehlschlagt. Falls Sie diese
Option angeben und eine Datei in der Zeit zwischen dem Lesen des
Namens im Verzeichnis durch find und der Zeit geloscht wurde, in
der Stat fur die Datei ausgefuhrt wird, wird keine Fehlermeldung
ausgegeben. Dies gilt auch fur Dateien und Verzeichnisse, deren
Namen auf der Befehlszeile angegeben wurden. Diese Option tritt
dann in Kraft, wenn die Befehlszeile gelesen wird, was bedeutet,
dass Sie nicht einen Teil des Dateisystem durchsuchen konnen,
bei dem diese Option eingeschaltet ist und einen Teil, bei dem
diese Option ausgeschaltet ist (falls Sie dies tun mussen,
werden Sie stattdessen zwei find-Befehle absetzen mussen, einen
mit und einen ohne der Option.
-maxdepth Ebenen
steigt hochstens Ebenen (eine nicht negative Ganzzahl) Ebenen im
Verzeichnisbaum unterhalb der Befehlszeilenargumente hinab.
-maxdepth 0 bedeutet, dass die Tests und Aktionen nur auf die
Befehlszeilenargumente angewandt werden.
-mindepth Ebenen
keine Tests oder Aktionen auf Ebenen kleiner als Ebenen (eine
nicht negative Ganzzahl) anwenden. -mindepth 1 bedeutet, dass
alle Dateien mit Ausnahme der Befehlszeilenargumente verarbeitet
werden.
-mount keine Verzeichnisse auf anderen Dateisystemen hinabsteigen. Ein
alternativer Name fur -xdev aus Kompatibilitatsgrunden mit
anderen Versionen von find.
-noignore_readdir_race
den Effekt -ignore_readdir_race ausschalten
-noleaf
nicht optimieren mit der Annahme, dass Verzeichnisse zwei
Unterverzeichnisse weniger enthalten, als ihre Anzahl harter
Links. Diese Option wird benotigt, wenn Dateisysteme durchsucht
werden, die nicht den Konventionen von Unix-Verzeichnis-Links
folgen, wie CD-ROM-, MS-DOS-Dateisysteme oder
AFS-Datentragereinhangepunkte. Jedes Verzeichnis auf einem
normalen Unix-Dateisystem hat mindestens zwei harte Links:
seinen Namen und seinen >>..<<-Eintrag. Zusatzlich haben seine
Unterverzeichnisse (falls vorhanden) jeweils einen
>>..<<-Eintrag, der auf dieses Verzeichnis verweist. Wenn find
ein Verzeichnis untersucht, weiB es, nachdem es zwei
Unterverzeichnissen weniger als der Links-Anzahl des
Verzeichisses begegnet ist, dass der Rest der Eintrage des
Verzeichnisses keine Verzeichnisse sind (Blatter im
Verzeichnisbaum). Falls nur die Namen der Dateien untersucht
werden mussen, gibt es keinen Grund Stat fur sie auszufuhren;
dies fuhrt zu einer spurbaren Erhohung der Suchgeschwindigkeit.
-regextype Typ
Andert die Syntax regularer Ausdrucke, die von -regex- und
-iregex-Tests verstanden werden, die spater auf der Befehlszeile
auftreten. Derzeit implementierte Typen sind >>emacs<< (das ist
die Vorgabe), >>posix-awk<<, >>posix-basic<<, >>posix-egrep<<
und >>posix-extended<<.
-version, --version
gibt die Versionsnummer von find aus und wird beendet
-warn, -nowarn
schaltet Warnungen ein oder aus. Diese Warnungen betreffen nur
die Benutzung der Befehlszeile, nicht fur irgendwelche
Bedingungen, auf die find beim Durchsuchen von Verzeichnissen
stoBen konnte. Das Standardverhalten entspricht -warn, falls die
Standardeingabe ein Terminal ist und andernfalls -nowarn.
-xdev keine Verzeichnisse auf anderen Dateisystemen hinabsteigen
TESTS
Einige Tests, zum Beispiel -newerXY und -samefile erlauben den
Vergleich der aktuell untersuchten Datei und irgendwelchen
Referenzdateien, die auf der Befehlszeile angegeben wurden.Wenn diese
Tests benutzt werden, wird die Interpretation der Referenzdatei durch
die Optionen -H, -L, -P und jedem vorhergehenden -follow festgelegt,
die Referenzdatei wird nur einmal zu dem Zeitpunkt untersucht, an dem
die Befehlszeile ausgewertet wird. Falls die Referenzdatei nicht
untersucht werden kann (weil zum Beispiel der Systemaufruf stat(2)
dafur fehlschlagt), wird eine Fehlermeldung ausgegeben und find endet
mit einem Status ungleich null.
Numerische Argumente konnen angegeben werden als
+n fur groBer als n,
-n fur kleiner als n,
n fur genau n
-amin n,
Auf die Datei wurde zuletzt vor n Minuten zugegriffen.
-anewer Datei
Auf die Datei ist zugegriffen worden, nachdem Datei das letzten
Mal verandert wurde. Falls Datei ein symbolischer Link ist und
die Optionen -H oder -L in Kraft sind, wird immer die
Zugriffszeit der Datei benutzt, auf die er zeigt.
-atime n
Auf die Datei ist vor n*24 Stunden zugegriffen worden. Wenn Find
herausfindet, wieviele 24-Stundenzeitraume es her ist, seit auf
die Datei zugegriffen wurde, wird jeder Bruchteil ignoriert, so
dass -atime +1 auf eine Datei passt, auf die zuletzt vor zwei
Tagen zugegriffen wurde.
-cmin n
Der Status der Datei wurde vor n Minuten geandert.
-cnewer Datei
Der Status der Datei wurde verandert, seit Datei zum letzten Mal
geandert wurde. Falls Datei ein symbolischer Link ist und die
Optionen -H oder -L in Kraft sind, wird immer die
Anderungszeitzeit des Status der Datei benutzt, auf den er
zeigt.
-ctime n
Der Dateistatus wurde zuletzt vor n*24 Stunden geandert. Lesen
Sie die Kommentare zu -atime, um zu verstehen, wie Rundung die
Interpretation der Dateistatus-Anderungszeiten beeinflusst.
-empty Die Datei ist leer und entweder eine regulare Datei oder ein
Verzeichnis.
-executable
passt auf ausfuhrbare Dateien und durchsuchbare Verzeichnisse
(im Sinn der Namensauflosung). Dies berucksichtigt
Zugriffssteuerungslisten (Access Control Lists) und andere
Artefakte von Benutzerrechten, die der Test -perm ignoriert.
Dieser Test macht Gebrauch vom Systemaufruf access(2) und kann
daher durch NFS-Server getauscht werden, die Abbildung der
Benutzerkennzahl (oder Root-Squashing) nutzen, da viele Systeme
access(2) im Kernel des Clients implementieren und daher von den
Abbildungsinformationen der Benutzerkennzahlen keinen Gebrauch
machen konnen, die auf dem Server gehalten werden. Da dieser
Test nur auf dem Ergebnis des Systemaufrufs access(2) basiert,
gibt es keine Gewahrleistung, dass eine Datei, bei der dieser
Test erfolgreich war, tatsachlich ausgefuhrt werden kann.
-false Immer falsch
-fstype Typ
Die Datei liegt auf einem Dateisystem des Typs Typ. Die gultigen
Dateisystemtypen variieren zwischen verschiedenen Versionen von
Unix; eine unvollstandige Liste der Dateisystemtypen, die auf
einigen Versionen von Unix und anderen akzeptiert werden ist
Folgende: ufs, 4.2, 4.3, nfs,tmp, mfs, S51K und S52K. Sie konnen
-printf mit der Option %F benutzen, um die Typen Ihrer
Dateisysteme zu sehen.
-gid n Die numerische Gruppenkennzahl der Datei ist n.
-group gname
Datei gehort der Gruppe Gruppenname (numerische
Gruppenkennzahlen erlaubt).
-ilname Muster
wie -lname, aber der Treffer berucksichtigt keine
GroB-/Kleinschreibung. Falls die Option -follow in Kraft ist,
gibt dieser Test falsch zuruck, auBer wenn der symbolische Link
kaputt ist.
-iname Muster
Funktioniert genauso wie -name ohne jedoch GroB- und
Kleinschreibung zu berucksichtigen. Zum Beispiel werden die
Muster >>fo*<< und >>F??<< beide die Dateien >>Foo<<, >>FOO<<,
>>foo<<, >>fOo<< usw. finden. In diesen Mustern konnen, im
Gegensatz zur Dateinamensexpansion durch die Shell, auch
Dateinamen mit einem >>.<< am Anfang von einem >>*<< abgedeckt
sein. Daher wird find -name *bar auch Dateien wie >>.foo-bar<<
finden. Bitte beachten Sie, dass Sie die Muster mit
Anfuhrungszeichen umschlieBen, ansonsten werden samtliche
Platzhalterzeichen bereits von der Shell expandiert.
-inum n
Datei hat die Inode-Nummer n. Es ist normalerweise einfacher,
stattdessen den Test -samefile zu benutzen.
-ipath Muster
verhalt sich wie -iwholename. Diese Option ist missbilligt,
benutzen Sie sie daher bitte nicht.
-iregex Muster
wie -regex, aber der Treffer berucksichtigt keine
GroB-/Kleinschreibung
-iwholename Muster
wie -wholename, aber der Treffer berucksichtigt keine
GroB-/Kleinschreibung
-links n
Datei hat n Links.
-lname Muster
Datei ist ein symbolischer Link, dessen Inhalt zum Shell-Muster
Muster passt. Insbesondere behandeln die Metazeichen nicht >>/<<
oder >>.<<. Falls die Optionen -L oder -follow in Kraft sind,
gibt dieser Test falsch zuruck, auBer wenn der symbolische Link
kaputt ist.
-mmin n
Daten der Datei wurden zuletzt vor n Minuten verandert.
-mtime n
Daten der Datei wurden zuletzt vor n*24 Stunden verandert.
Lesen Sie die Kommentare zu -atime, um zu verstehen, wie Rundung
die Interpretation der Dateianderungszeiten beeinflusst.
-name Muster
Der Dateiname ohne fuhrende Verzeichnisse (basename) passt zum
Shell-Muster Muster. Die Metazeichen (>>*<<, >>?<< und >>[]<<)
entsprechen einem >>.<< am Anfang des Basisnamens (dies ist eine
Anderung in findutils-4.2.2; siehe Abschnitt STANDARDKONFORMITAT
unten). Um ein Verzeichnis und die Dateien darin zu ignorieren,
benutzen Sie -prune; ein Beispiel finden Sie in der Beschreibung
von -path. Klammern werden nicht als etwas Besonderes erkannt,
trotz der Tatsache, dass einige Shells einschlieBlich der Bash
Klammern eine besondere Bedeutung innerhalb von Shell-Mustern
beimessen. Der Dateinamensabgleich wird unter Benutzung der
Bibliotheksfunktion fnmatch(3) durchgefuhrt. Vergessen Sie
nicht, das Muster in Anfuhrungszeichen zu setzen, um es vor
Expandierung durch die Shell zu schutzen.
-newer Datei
Datei ist spater verandert worden als Datei. Falls Datei ein
symbolischer Link ist und die Optionen -H oder -L in Kraft sind,
wird immer die Veranderungszeit der Datei benutzt, auf den er
verweist.
-newerXY Bezug
Vergleicht den Zeitstempel der aktuellen Datei mit Bezug. Das
Argument Bezug ist normalerweise der Name einer Datei (und einer
ihrer Zeitstempel wird fur den Vergleich benutzt), aber es
konnte auch eine Zeichenkette sein, die eine absolute Zeit
beschreibt. X und Y sind Platzhalter fur andere Buchstaben.
Diese Buchstaben wahlen aus, welche zugehorige Zeit fur den
Vergleich mit Bezug benutzt wird.
a Die Zugriffszeit der Datei Bezug
B Die Erstellungszeit der Datei Bezug
c Die Inode-Statusanderungszeit von Bezug
m Die Anderungszeit der Datei Bezug
t Bezug wird direkt als eine Zeit interpretiert
Einige Kombinationen sind ungultig. So darf X bespielsweise
nicht t sein. Einige Kombinationen sind nicht auf allen Systemen
implementiert. B wird beispielsweise nicht von allen Systemen
unterstutzt. Falls eine ungultige oder nicht unterstutzte
Kombination von XY angegeben wurde, kommt es dadurch zu einem
schwerwiegenden Fehler. Zeitangaben werden diesbezuglich wie das
Argument zu der Option -d von GNU-date interpretiert. Falls Sie
versuchen die Erstellungszeit einer Bezugsdatei zu benutzen und
die Erstellungszeit nicht bestimmt werden kann, kommt es dadurch
zu einer Nachricht uber einen schwerwiegenden Fehler. Falls Sie
einen Test angeben, der sich auf die Erstellungszeit der Dateien
bezieht, die untersucht werden, wird dieser Test fur jene
Dateien fehlschlagen, deren Erstellungszeit nicht bekannt ist.
-nogroup
Der numerische Gruppenkennzahl der Datei entspricht keiner
Gruppe.
-nouser
Die numerische Benutzerkennzahl der Datei gehort zu keinem
Benutzer.
-path Muster
Der Dateiname passt zum Shell-Muster Muster. Die Metazeichen
behandeln >>/<< oder >>.<< nicht besonders; daher wird zum
Beispiel
find . -path "./sr*sc"
einen Eintrag fur ein Verzeichnis mit Namen >>./src/misc<<
ausgeben (falls eines exisitert). Benutzen Sie -prune, um einen
ganzen Verzeichnisbaum zu ignorieren, anstatt jede Datei im Baum
zu uberprufen. Um beispielsweise das Verzeichnis >>src/emacs<<
und alle Dateien und Verzeichnisse darin zu uberspringen und die
Namen der anderen gefundenen Dateien auszugeben, versuchen Sie
Folgendes:
find . -path ./src/emacs -prune -o -print
Beachten Sie, dass Mustervergleichstests auf den ganzen
Dateinamen angewandt werden, beginnend von einem der auf der
Befehlszeile benannten Startpunkte. Es wurde nur Sinn ergeben,
hier einen absoluten Pfadnamen zu benutzen, wenn der maBgebliche
Startpunkt auch ein absoluter Pfad ware. Dies bedeutet, dass
dieser Befehl niemals auf etwas zutreffen wird:
find bar -path /foo/bar/myfile -print
Das Pradikat -path wird auch auf HP-UX durch find unterstutzt
und wird in einer kommenden Version des POSIX-Standards
enthalten sein.
-perm Modus
Die Zugriffsrechte der Datei entsprechen exakt dem Modus (oktal
oder symbolisch). Da exakte Ubereinstimmung notig ist, wenn Sie
diese Form fur symbolische Modi benutzen mochten, mussen Sie
moglicherweise eine eher komplexe Moduszeichenkette angeben.
-perm g=w wird beispielsweise nur bei Dateien zutreffen, die den
Modus 0020 haben (also einer, bei dem das Schreibrecht der
Gruppe das einzige gesetzte Recht ist). Wahrscheinlicher ist,
dass Sie die Formen >>/<< oder >>-<< benutzen mochten, zum
Beispiel -perm -g=w, was auf jede Datei mit
Gruppenschreibrechten passt. Einige anschauliche Beispiele
finden Sie im Abschnitt BEISPIELE.
-perm -Modus
Alle Rechte-Bits Modus sind fur diese Datei gesetzt. Symbolische
Modi werden in dieser Form akzeptiert. Dies ist ublicherweise
die Art, auf die Sie sie benutzen mochten. Sie mussen >>u<<,
>>g<< oder >>o<< angeben, falls Sie einen symbolischen Modus
verwenden. Einige anschauliche Beispiele finden Sie im Abschnitt
BEISPIELE.
-perm /Modus
Einige der Rechte-Bits Modus sind fur diese Datei gesetzt.
Symbolische Modi werden in dieser Form akzeptiert. Sie mussen
>>u<<, >>g<< oder >>o<< angeben, falls Sie einen symbolischen
Modus verwenden. Einige anschauliche Beispiele finden Sie im
Abschnitt BEISPIELE. Falls keine Rechte-Bits in Modus gesetzt
sind, trifft dieser Test auf alle Dateien zu (die Idee, die
dahinter steckt, ist das durchgangige Verhalten zu -perm -000).
-perm +Modus
missbilligt. Dies ist die alte Methode nach Dateien zu suchen,
deren Rechte-Bits in Modus gesetzt sind. Sie sollten stattdessen
-perm /Modus benutzen. Der Versuch, die >>+<<-Syntax mit
symbolischen Links zu verwenden, wird zu uberraschenden
Ergebnissen fuhren. >>u+x<< ist beispielsweise ein gultiger
symbolischer Modus (entspricht +u,+x, d.h. 0111) und wird daher
nicht von -perm +Modus ausgewertet, stattdessen aber als die
genaue Modusangabe -perm Modus. Daher entspricht es Dateien mit
exakt den Rechten 0111 anstatt den Dateien, deren
Ausfuhrungs-Bit gesetzt ist. Falls Sie diesen Paragraph
verwirrend finden, stehen Sie damit nicht allein da - benutzen
Sie nur -perm /Modus. Diese Form des Tests -perm ist
missbilligt, da die POSIX-Spezifikation eine Interpretation des
fuhrenden >>+<< als Teil des symbolischen Modus erfordert,
wodurch stattdessen zur Benutzung von >>/<< gewechselt wird.
-readable
trifft zu auf lesbare Dateien. Dies berucksichtigt
Zugriffssteuerungslisten (ACLs) und andere Artefakte von
Rechten, die der Test -perm ignoriert. Dieser Test macht
Gebrauch vom Systemaufruf access(2) und kann daher durch
NFS-Server getauscht werden, die Abbildung der Benutzerkennzahl
(oder Root-Squashing) nutzen, da viele Systeme access(2) im
Kernel des Clients implementieren und daher von den
Abbildungsinformationen der Benutzerkennzahlen keinen Gebrauch
machen konnen, die auf dem Server gehalten werden.
-regex Muster
der Dateiname passt zu dem regularen Ausdruck Muster. Dies ist
ein Treffer auf den gesamten Pfad, keine Suche. Um
beispielsweise eine Datei mit dem Namen >>./fubar3<< zu finden,
konnen Sie die regularen Ausdrucke >>.*bar.<< oder >>.*b.*3<<
benutzen, aber nicht >>f.*r3<<. Die regularen Ausdrucke, die
find versteht, sind standardmaBig regulare Ausdrucke von Emacs,
dies kann aber mit der Option -regextype geandert werden.
-samefile Name
Datei bezieht sich auf den gleichen Inode wie Name. Wenn -L in
Kraft ist, kann dies symbolische Links umfassen.
-size n[cwbkMG]
Datei belegt n Speichereinheiten. Die folgenden Endungen konnen
benutzt werden:
>>b<< fur 512-Byte-Blocke (dies ist die Vorgabe, wenn keine
Endung benutzt wird)
>>c<< fur Byte
>>w<< fur Worter aus zwei Byte
>>k<< fur Kilobyte (Einheiten aus 1024 Byte)
>>M<< fur Megabyte (Einheiten aus 1048576 Byte)
>>G<< fur Gigabyte (Einheiten aus 1073741824 Byte)
Zur Ermittlung der GroBe werden keine indirekten Blocke gezahlt,
aber Blocke in Datei mit Lochern (Sparse-Dateien), die nicht
wirklich reserviert sind. Vergessen Sie nicht, dass die
Formatbezeichner >>%k<< und >>%b<< von -printf Dateien mit
Lochern unterschiedlich handhaben. Die Endung >>b<< kennzeichnet
immer 512-Byte-Blocke und nie 1-Kilobyte-Blocke, was sich vom
Verhalten von -ls unterscheidet.
-true immer wahr
-type c
Datei ist vom Typ c;:
b blockorientierte Spezialdatei (gepuffert)
c zeichenorientierte Spezialdatei (nicht gepuffert)
d Verzeichnis
p benannte Pipe (FIFO)
f regulare Datei
l symbolischer Link; dies ist niemals wahr, falls die
Optionen -L oder -follow in Kraft sind, auBer wenn der
symbolische Link kaputt ist. Falls Sie nach symbolischen
Links suchen mochten, wahrend -L in Kraft ist, benutzen
Sie -xtype.
s Socket
D Door (Solaris)
-uid n Die numerische Benutzerkennzahl der Datei ist n.
-used n
Auf die Datei ist n Tage nach ihrer letzten Statusanderung
zugegriffen worden.
-user Benutzername
Die Datei gehort dem Anwender Benutzername (numerische
Benutzerkennzahl erlaubt).
-wholename Muster
Siehe -path. Diese Alternative ist nicht so portierbar wie
-path.
-writable
passt auf schreibbare Dateien. Die berucksichtigt
Zugriffssteuerungslisten (ACLs) und andere Artefakte von
Rechten, die der Test -perm ignoriert. Dieser Test macht
Gebrauch vom Systemaufruf access(2) und kann daher durch
NFS-Server getauscht werden, die Abbildung der Benutzerkennzahl
(oder Root-Squashing) nutzen, da viele Systeme access(2) im
Kernel des Clients implementieren und daher von den
Abbildungsinformationen der Benutzerkennzahlen keinen Gebrauch
machen konnen, die auf dem Server gehalten werden.
-xtype c
das Gleiche wie -type, auBer wenn die Datei ein symbolischer
Link ist. Fur symbolische Links gilt: Falls die Optionen -H oder
-P angegeben wurden, ist dies wahr, wenn die Datei ein Link auf
eine Datei des Typs c ist oder, falls die Option -L angegeben
wurde, wenn c >>l<< ist. Anders ausgedruckt, fur symbolische
Links pruft -xtype den Typ der Datei, den -type nicht pruft.
AKTIONEN
-delete
Dateien loschen; wahr, falls erfolgreich entfernt. Falls das
Entfernen fehlschlagt, wird eine Fehlermeldung ausgegeben. Falls
-delete fehlschlagt, wird der Ruckgabewert von find ungleich
null sein (wenn es letztendlich beendet wird). Das Benutzen von
-delete schaltet automatisch die Option -depth ein.
Warnungen: Vergessen Sie nicht, dass die Find-Befehlszeile als
ein Ausdruck ausgewertet wird. Daher wird das Voranstellen von
-delete dazu fuhren, dass find versucht alles was Sie unterhalb
des Startpunkts angegeben haben zu loschen. Wenn Sie eine
find-Befehlszeile testen, die Sie spater beabsichtigen mit
-delete zu nutzen, sollten Sie explizit -depth angeben, um
spatere Uberraschungen zu vermeiden. Da -delete -depth
impliziert, konnen Sie sinnvollerweise nicht -prune und -delete
zusammen benutzen.
-exec Befehl ;
fuhrt den Befehl aus; wahr, wenn Status 0 zuruckgegeben wird.
Alle folgenden Argumente von find werden als Argumente des
Befehls betrachtet, bis ein Argument gefunden wird, das >>;<<
beinhaltet. Die Zeichenkette >>{}<< wird uberall, wo sie in den
Argumenten erscheint, durch den aktuell verarbeiteten Dateinamen
ersetzt, nicht nur in Argumenten, in denen sie allein steht, wie
in einigen Versionen von find. Es konnte notig sein, beide
Konstruktionen zu maskieren (mit einem >>\<<) oder in
Anfuhrungszeichen zu setzen, um sie vor einer Expansion durch
die Shell zu schutzen. Im Abschnitt BEISPIELE finden Sie
Beispiele, wie Sie die Option -exec benutzen. Der angegebene
Befehl wird jeweils fur jede gefundene Datei ausgefuhrt. Der
Befehl wird im Startverzeichnis ausgefuhrt. Es gibt
unvermeidliche Sicherheitsprobleme rings um den Gebrauch der
Aktion -exec; Sie sollten stattdessen die Option -execdir
verwenden.
-exec Befehl {} +
Diese Variante der Aktion -exec fuhrt den angegebenen Befehl fur
die ausgewahlten Dateien aus, aber die Befehlszeile wird durch
das Anhangen jeder ausgewahlten Datei an das Ende gebildet; die
Gesamtzahl der Befehlsaufrufe wird viel geringer sein, als die
Anzahl passender Dateien. Die Befehlszeile wird auf die gleiche
Weise wie bei xargs gebildet. Innerhalb des Befehls ist nur eine
Instanz von >>{}<< erlaubt. Der Befehl wird im Startverzeichnis
ausgefuhrt.
-execdir Befehl ;
-execdir Befehl {} +
wie -exec, aber der angegebene Befehl wird in dem
Unterverzeichnis ausgefuhrt, das die passende Datei enthalt, was
normalerweise nicht das Verzeichnis ist, in dem Sie find
aufgerufen haben. Dies ist eine wesentlich sicherere Methode zum
Aufruf von Befehlen, da sie Race Conditions wahrend der
Auflosung von Pfaden zu den passenden Dateien vermeidet. Wie bei
der Aktion -exec wird die Form >>+<< von -execdir eine
Befehlszeile bilden, um mehr als eine passende Datei zu
verarbeiten, aber jeder angegebene Aufruf des Befehls wird nur
Dateien auflisten, die im gleichen Unterverzeichnis existieren.
Falls Sie diese Option benutzen, mussen Sie sicherstellen, dass
Ihre Umgebungsvariable $PATH nicht direkt auf >>.<< verweist;
andernfalls konnte ein Angreifer Befehle seiner Wahl ausfuhren,
indem er eine Datei mit geeignetem Namen in einem Verzeichnis
hinterlasst, in dem Sie -execdir ausfuhren werden. Das Gleiche
gilt fur die Eintrage in $PATH, die leer oder keine absoluten
Verzeichnisnamen sind.
-fls Datei
wahr; wie -ls, schreibt aber wie -fprint nach Datei. Die
Ausgabedatei wird immer erstellt, sogar wenn das Pradikat
niemals passte. Lesen Sie den Abschnitt UN"UBLICHE DATEINAMEN, zu
erfahren, wie unubliche Dateinamen gehandhabt werden.
-fprint Datei
wahr; gibt den vollstandigen Dateinamen in Datei aus. Falls
Datei nicht existiert, wird sie erzeugt; andernfalls wird sie
gekurzt. Die Dateinamen >>/dev/stdout<< und >>/dev/stderr<<
werden gesondert gehandhabt; sie beziehen sich auf die
Standardausgabe beziehungsweise die Standardfehlerausgabe. Die
Ausgabedatei wird immer erstellt, sogar wenn das Pradikat
niemals passte. Lesen Sie den Abschnitt UN"UBLICHE DATEINAMEN, um
zu erfahren, wie unubliche Dateinamen gehandhabt werden.
-fprint0 Datei
wahr; wie -print0, schreibt aber wie -fprint nach Datei. Die
Ausgabedatei wird immer erstellt, sogar, wenn das Pradikat
niemals passte. Lesen Sie den Abschnitt UN"UBLICHE DATEINAMEN, um
zu erfahren, wie unubliche Dateinamen gehandhabt werden.
-fprintf Datei Format
wahr; wie -printf, schreibt aber wie -fprint nach Datei. Die
Ausgabedatei wird immer erstellt, sogar, wenn das Pradikat
niemals passte. Lesen Sie den Abschnitt UN"UBLICHE DATEINAMEN, um
zu erfahren, wie unubliche Dateinamen gehandhabt werden.
-ls wahr; listet aktuelle Datei im Format ls -dils auf der
Standardausgabe auf. Die Anzahl der Blocke besteht aus
1K-Blocken, auBer wenn die Umgebungsvariable POSIXLY_CORRECT
gesetzt ist, in der Blocke zu 512 Byte benutzt werden. Lesen Sie
den Abschnitt UN"UBLICHE DATEINAMEN, um zu erfahren, wie
unubliche Dateinamen gehandhabt werden.
-ok Befehl ;
wie -exec, vorher wird der Anwender aber um Bestatigung gebeten.
Falls der Anwender zustimmt, wird der Befehl ausgefuhrt.
Andernfalls wird nur falsch zuruckgegeben. Wenn der Befehl
ausgefuhrt wird, ist seine Standardeingabe umgeleitet von
/dev/null.
Die Antwort auf die Abfrage wird mit einem Paar regularer
Ausdrucke verglichen, um zu bestimmen, ob es eine positive oder
negative Antwort ist. Dieser regulare Ausdruck stammt vom
System, falls die Umgebungsvariable POSIXLY_CORRECT gesetzt ist,
ansonsten von den Nachrichtenubersetzungen von find. Falls das
System keine geeignete Definition hat, wird die Definition von
find selbst benutzt. Auf jeden Fall wird die Interpretation des
regularen Ausdrucks von den Umgebungsvariablen >>LC_CTYPE<<
(Zeichenklassen) und >>LC_COLLATE<< (Zeichenbereiche und
entsprechende Klassen) beeintrachtigt.
-okdir Befehl ;
wie -exec, fragt den Anwender aber zuerst auf die gleiche Art
wie fur -ok. Falls der Anwender nicht zustimmt, wird nur falsch
zuruckgegeben. Wenn der Befehl ausgefuhrt wird, ist seine
Standardeingabe umgeleitet von /dev/null.
-print wahr; gibt den vollstandigen Dateinamen gefolgt von einem
Zeilenvorschub auf der Standardausgabe aus. Falls Sie die
Ausgabe von find in ein anderes Programm per Pipe weiterleiten
und dort auch nur die geringste Moglichkeit besteht, dass die
Dateien, die Sie suchen, einen Zeilenvorschub enthalten, sollten
Sie ernsthaft in Betracht ziehen, statt -print -print0 zu
verwenden. Lesen Sie den Abschnitt UN"UBLICHE DATEINAMEN, um zu
erfahren, wie unubliche Dateinamen gehandhabt werden.
-print0
wahr; gibt den vollstandigen Dateinamen gefolgt von einem
Null-Zeichen (anstelle des Zeilenvorschubs, den -print benutzt)
aus. Dies ermoglicht, dass Dateinamen, die Zeilenvorschube oder
andere Typen von Leerraumen enthalten, korrekt durch Programme
interpretiert werden, die die Ausgabe von find verarbeiten.
Diese Option entspricht der Option -0 von xargs.
-printf Format
wahr; gibt Format auf der Standardausgabe aus und interpretiert
dabei >>\<<- und >>%<<-Direktiven. Feldbreiten und Genauigkeiten
konnen wie bei der C-Funktion >>printf<< angegeben werden. Bitte
beachten Sie, dass viele Felder mit %s statt mit %d ausgegeben
werden. Dies kann bedeuten, dass der Schalter nicht wie erwartet
funktioniert. Dies bedeutet auch, dass die Option >>-<< nicht
funktioniert (er erzwingt, dass Felder linksbundig ausgerichtet
werden). Anders als -print fugt -printf keinen Zeilenvorschub an
das Ende der Zeichenkette. Die Direktiven sind:
\a Alarmton
\b Ruckschritt
\c Ausgabe gemaB dieser Formatbeschreibung sofort stoppen
und die Ausgabe leeren
\f Seitenvorschub
\n Zeilenvorschub
\r Wagenrucklauf
\t horizontaler Tabulator
\v vertikaler Tabulator
\0 ASCII-Code 0
\\ der Ruckwartsschragstrich selbst (>>\<<)
\NNN das Zeichen, dessen ASCII-Kode NNN ist (oktal)
Ein >>\<<-Zeichen gefolgt von einem anderen Zeichen wird als ein
gewohnliches Zeichen betrachtet, daher werden beide ausgegeben.
%% das Prozentzeichen selbst
%a die Zeit des letzten Zugriffs auf die Datei,
zuruckgegeben im Format der C-Funktion >>ctime<<
%Ak die Zeit des letzten Zugriffs auf die Datei, angegeben
durch k. Das ist entweder >>@<< oder eine Direktive fur
die C-Funktion >>strftime<<. Die moglichen Werte fur k
sind nachfolgend aufgefuhrt; einige davon sind
moglicherweise aufgrund von Unterschieden zwischen den
Systemen nicht auf allen Systemen in >>strftime<<
verfugbar.
@ Sekunden seit dem 1.1.1970, 00:00 Uhr GMT mit
Bruchteil
Zeitfelder:
H Stunde (00..23)
I Stunde (01..12)
k Stunde ( 0..23)
l Stunde ( 1..12)
M Minute (00..59)
p PM oder AM der Locale
r Zeit, 12 Stunden (hh:mm:ss: AM/PM)
S Sekunden (00.00 bis 61.00). Es gibt
Nachkommastellen.
T Zeit, 24 Stunden (hh:mm:ss)
+ Datum und Zeit, getrennt durch >>+<<, zum Beispiel
>>2004-04-28+22:22:05.0<<. Dies ist eine
GNU-Erweiterung. Die Zeit wird in der aktuellen
Zeitzone angegeben (die durch das Setzen der
Umgebungsvariable TZ beeinflusst sein konnte). Das
Sekundenfeld beinhaltet einen Bruchteil.
X Zeitdarstellung der Locale (H:M:S)
Z Zeitzone (z.B. EDT) oder nichts, falls keine
Zeitzone bestimmt werden kann
Datumsfelder:
a abgekurzter Wochentag der Locale (So bis Sa)
A voller Wochentag der Locale, variable Lange
(Sonntag bis Samstag)
b abgekurzter Monatsname der Locale (Jan bis Dez)
B voller Monatsname der Locale in variabler Lange
(Januar bis Dezember)
c Datum und Zeit der Locale (Sa 4. Nov 12:02:33 EST
1989). Das Format entspricht dem von ctime(3) und
wahrt daher die Kompatibilitat mit diesem Format.
Es gibt dort keine Nachkommastellen im
Sekundenfeld.
d Tag des Monats (01 bis 31)
D Datum (mm/dd/yy)
h das Gleiche wie b
j Tag des Jahres (001..366)
m Monat (01..12)
U Nummer der Woche im Jahr mit Sonntag als erstem
Tag der Woche (00 bis 53)
w Tag der Woche (0 bis 6)
W Nummer der Woche im Jahr mit Montag als erstem Tag
der Woche (00 bis 53)
x Datumsdarstellung der Locale (mm/dd/yy)
y Die letzten zwei Ziffern des Jahres (00..99)
Y Jahr (1970 )
%b der fur diese Datei benutzte Plattenplatz in
512-Byte-Blocken. Da Plattenplatz als Vielfaches der
BlockgroBe des Dateisystems reserviert wird, ist dieser
ublicherweise groBer als %s/512, er kann aber auch
kleiner sein, wenn die Datei eine Datei mit Lochern
(Sparse-Datei) ist.
%c das Datum, an dem zum letzten Mal der Status der Datei
geandert wurde, im Format der C-Funktion >>ctime<<
%Ck das Datum, an dem zum letzten Mal der Status der Datei
geandert wurde, in dem durch k angegebenen Format, was
das Gleiche ist, wie fur %A
%d die Tiefe der Datei im Verzeichnisbaum; Null bedeutet,
dass die Datei ein Befehlszeilenargument ist.
%D die Geratenummer des Gerats auf der die Datei existiert
(das Feld >>st_dev<< der Stuktur >>stat<<) als
Dezimalzahl
%f der Name der Datei, bei dem die voranstehenden
Verzeichnisse entfernt wurden (nur das letzte Element)
%F Typ des Dateisystems, auf dem die Datei liegt; dieser
Wert kann fur -fstype benutzt werden.
%g der Name der Gruppe der Datei oder die numerische
Gruppenkennzahl, wenn die Gruppe keinen Namen hat
%G die numerische Gruppenkennzahl der Datei
%h voranstehende Verzeichnisse des Dateinamens (alles auBer
dem letzten Element). Falls der Dateiname keine
Schragstriche enthalt (da er im aktuellen Verzeichnis
ist), wird der Bezeichner %h zu >>.<< expandiert.
%H das Befehlszeilenargument, unter dem die Datei gefunden
wurde
%i die Inode-Nummer der Datei (dezimal)
%k der fur diese Datei benutzte Plattenplatz in 1K-Blocken.
Da Plattenplatz als Vielfaches der BlockgroBe des
Dateisystems reserviert wird, ist dieser ublicherweise
groBer als %s/1024, er kann aber auch kleiner sein, wenn
die Datei eine Datei mit Lochern (Sparse-Datei) ist.
%l Ziel des symbolischen Links (leere Zeichenkette, falls
die Datei kein symbolischer Link ist
%m die Zugriffsrechte-Bits der Datei (oktal). Diese Option
benutzt die >>traditionellen<< Nummern, die die meisten
Unix-Implementierungen benutzen, falls aber Ihre
Implementierung eine unubliche Sortierung der oktalen
Zugriffsrechte benutzt, werden Sie einen Unterschied
zwischen dem tatsachlichen Wert des Datei-Modus und der
Ausgabe von %m sehen. Normalerweise mochten Sie eine
fuhrende Null vor dieser Zahl haben. Um dies zu erreichen
sollten Sie die Markierung # benutzen (wie beispielsweise
in >>%#m<<).
%M die Zugriffsrechte der Datei (in symbolischer Form, wie
fur ls). Diese Direktive wird von Findutils seit
einschlieBlich Version 4.2.5 unterstutzt.
%n Anzahl harter Links auf die Datei
%p Name der Datei
%P Der Name der Datei mit dem Namen des
Befehlszeilenarguments, unter dem sie gefunden wurde,
wurde entfernt.
%s die GroBe der Datei in Byte
%S Dichte der Datei. Diese wird berechnet als
(BLOCKGROBE*st_blocks / st_size). Der genaue Wert, den
Sie fur eine normale Datei einer bestimmten Lange
erhalten ist vom System abhangig. Normale Dateien mit
Lochern (Sparse-Dateien) werden einen Wert kleiner als
1.0 aufweisen und Dateien, die indirekte Blocke verwenden
konnen, einen Wert groBer als 1.0 haben. Der Wert, der
fur BLOCKGROBE verwandt wird, ist vom System abhangig,
betragt aber normalerweise 512 Byte. Falls die DateigroBe
null ist, ist der ausgegebene Wert undefiniert. Auf
Systemen, auf denen die Unterstutzung fur st_blocks
fehlt, wird als Dichte einer Datei 1.0. angenommen.
%t Zeit der letzten Anderung der Datei in dem von
C->>ctime<< zuruckgegebenen Format
%Tk Zeit der letzten Anderung der Datei in dem durch k
angegebenen Format, wie bei %A
%u Name des Bemutzers der Datei oder numerische
Benutzerkennzahl, falls der Benutzer keinen Namen hat.
%U numerische Benutzerkennzahl der Datei.
%y Typ der Datei (wie in ls -l), U=unbekannter Typ (sollte
nicht auftreten)
%Y Typ der Datei (wie %y), folgt aber symbolischen Links:
L=Schleife, N=nicht existent
Ein >>%<<-Zeichen gefolgt von einem anderen Zeichen wird
verworfen, aber das andere Zeichen wird ausgegeben (verlassen
Sie sich nicht darauf, da weitere Formatzeichen eingeleitet
werden konnten). Ein >>%<< am Ende des Formatarguments
verursacht unvorhersehbares Verhalten, da es dort kein
nachfolgendes Zeichen gibt. In einigen Locales konnte es Ihre
Hausturschlussel verstecken, wahrend es in anderen Ihre letzte
Seite des Romans, den Sie lesen, entfernt.
Die Direktiven %m und %d unterstutzen die Schalter # , 0 und +,
die anderen Direktiven jedoch nicht, selbst wenn Nummern
ausgegeben werden. Numerische Direktiven, die diese Schalter
nicht unterstutzen, beinhalten G, U, b, D, k und n. Der
Formatschalter >>-<< wird unterstutzt und andert die Ausrichtung
eines Feldes von rechtsbundig (was vorgegeben ist) auf
linksbundig.
Lesen Sie den Abschnitt UN"UBLICHE DATEINAMEN, um zu erfahren,
wie unubliche Dateinamen gehandhabt werden.
-prune wahr; falls die Datei ein Verzeichnis ist, nicht darin
hinabsteigen. Falls -depth angegeben ist, falsch; kein Effekt.
Da -delete -depth impliziert konnen Sie sinnvollerweise -prune
and -delete nicht zusammen benutzen.
-quit sofort beenden. Es werden keine laufenden Kindprozesse mehr
ubrig gelassen, aber es werden keine weiteren auf der
Befehlzeile angegebenen Pfade mehr verarbeitet. Beispielsweise
wird find /tmp/foo /tmp/bar -print -quit nur /tmp/foo ausgeben.
Alle aufzurufenen Befehlszeilen die mit -execdir {} + gebildet
wurden, werden aufgerufen bevor find beendet wird. Der
Ruckgabewert konnte null oder nicht null sein, je nachdem ob
bereits ein Fehler aufgetreten ist.
UN"UBLICHE DATEINAMEN
Viele der Aktionen von find resultieren in der Ausgabe von Daten, die
unter der Kontrolle anderer Benutzer stehen. Dies umfasst Dateinamen,
GroBen, Anderungszeiten und so weiter. Dateinamen stellen ein
potentielles Problem dar, da sie jedes Zeichen mit Ausnahme von >>\0<<
und >>/<< enthalten konnen. Unubliche Zeichen in Dateinamen konnen
unerwartete und oft unerwunschte Dinge mit Ihrem Terminal tun
(beispielsweise die Einstellungen Ihrer Funktionstasten auf einigen
Terminals andern). Unubliche Zeichen werden von verschiedenen Aktionen
unterschiedlich gehandhabt, wie im Folgenden beschrieben.
-print0, -fprint0
immer den genauen Dateinamen unverandert ausgeben, sogar wenn
die Ausgabe an ein Terminal geht.
-ls, -fls
Unubliche Zeichen werden maskiert. Leerzeichen,
Ruckwartsschragstrich und doppelte Anfuhrungszeichen werden
unter Benutzung von Maskierung im C-Stil ausgegeben (zum
Beispiel >>\f<<, >>\<<). Andere unubliche Zeichen werden unter
Benutzung von einer oktalen Maskierung ausgegeben. Andere
druckbare Zeichen (fur -ls und -fls sind das die Zeichen
zwischen oktal 041 und 0176) werden unverandert ausgegeben.
-printf, -fprintf
Falls die Ausgabe nicht an ein Terminal geht, wird sie
unverandert gedruckt. Andernfalls hangt das Ergebnis davon ab,
welche Direktive benutzt wird. Die Direktiven %D, %F, %g, %G,
%H, %Y und %y expandieren die Werte, die nicht unter der
Kontrolle des Dateibesitzers stehen und werden daher in der
vorliegenden Form gedruckt. Die Direktiven %a, %b, %c, %d, %i,
%k, %m, %M, %n, %s, %t, %u und %U haben Werte, die unter der
Kontrolle des Dateibesitzers der Datei stehen, die aber nicht
benutzt werden konnen, um beliebige Daten an das Terminal zu
senden und daher unverandert gedruckt werden. Die Direktiven %f,
%h, %l, %p und %P werden maskiert. Diese Maskierung wird auf die
gleiche Art durchgefuhrt wie fur GNU-ls. Dies ist nicht der
gleiche Maskierungsmechanismus wie der, der fur -ls und -fls
benutzt wird. Falls Sie die Wahl haben, welches Format fur die
Ausgabe benutzt werden soll, ist es normalerweise besser >>\0<<
als Endezeichen statt eines Zeilenvorschubs zu verwenden, da
Dateinamen Leerzeichen und Zeilenvorschube enthalten konnen. Die
Einstellung der Umgebungsvariablen >>LC_CTYPE<< wird benutzt, um
zu bestimmen, welche Zeichen maskiert werden mussen.
-print, -fprint
Maskierung wird auf die gleiche Weise wie fur -printf und
-fprintf gehandhabt. Falls Sie find in einem Skript benutzen
oder in einer Situation sind, in der die gefundenen Dateien
beliebige Namen haben konnen, sollten Sie in Betracht ziehen
-print0 anstelle von -print benutzen.
Die Aktionen -ok und -okdir geben den aktuellen Dateinamen unverandert
aus. Dies konnte sich in einem spateren Release andern.
OPERATOREN
aufgelistet in der Reihenfolge abnehmender Wertigkeit:
( expr )
Wertigkeit erzwingen. Da Klammern fur die Shell etwas spezielles
sind, werden Sie sie normalerweise maskieren mussen. Viele
Beispiele in dieser Handbuchseite verwenden zu diesem Zweck;
>>\( \) anstelle von >>( )<<.
! Ausdruck
wahr, wenn der Ausdruck falsch ist. Es wird normalerweise auch
notig sein, dieses Zeichen vor einer Interpretation durch die
Shell zu schutzen.
-not Ausdruck
das Gleiche wie ! Ausdruck, ist aber POSIX-konform
Ausdruck1 Ausdruck2
Zwei Ausdrucke in einer Reihe werden mit enem impliziten >>and<<
verbunden; Ausdruck2 wird nicht ausgewertet, wenn Ausdruck1
falsch ist.
Ausdruck1 -a Ausdruck2
entspricht Ausdruck1 Ausdruck2
Ausdruck1 -and Ausdruck2
entspricht Ausdruck1 Ausdruck2, ist aber POSIX-konform
Ausdruck1 -o Ausdruck2
oder; Ausdruck2 wird nicht ausgewertet, falls Ausdruck1 wahr ist
Ausdruck1 -or Ausdruck2
entspricht Ausdruck1 -o Ausdruck2, ist aber nicht POSIX-konform
Ausdruck1, Ausdruck2
Liste; sowohl Ausdruck1 als auch Ausdruck2 werden immer
ausgewertet. Der Wert von Ausdruck1 wird verworfen; der Wert der
Liste ist der Wert von Ausdruck2. Der Kommaoperator kann
nutzlich sein, um nach unterschiedlichen Kriterien zu suchen,
die Dateisystemhierarchie aber nur einmal zu durchlaufen. Die
Aktion -fprintf kann benutzt werden, um die verschiedenen
gefundenen Elemente in mehreren verschiedenen Ausgabedateien
aufzulisten.
STANDARDKONFORMIT"AT
Fur groBtmogliche Konformitat zum POSIX-Standard, sollten Sie die
Umgebungsvariable POSIXLY_CORRECT setzen. Die folgenden Optionen sind
im POSIX-Standard (IEEE Std 1003.1, 2003 Edition) spezifiziert:
-H Diese Option wird unterstutzt.
-L Diese Option wird unterstutzt.
-name Diese Option wird unterstutzt, aber die POSIX-Konformitat hangt
von der POSIX-Konformitat der Bibliotheksfunktion fnmatch(3) des
SYstems ab. Ab findutils-4.2.2 werden Shell-Metazeichen (zum
Beispiel >>*<<, >>?<< oder >>[]<<) zu einem fuhrenden >>.<<
passen, da dies die IEEE-PASC-Interpretation 126 erfordert. Dies
ist eine Anderung gegenuber vorherigen Versionen der Findutils.
-type unterstutzt. POSIX spezifiziert >>b<<, >>c<<, >>d<<, >>l<<,
>>p<<, >>f<< und >>s<<. GNU-Find unterstutzt auBerdem >>D<<, das
eine Door reprasentiert, wo diese vom Betriebsystem
bereitgestellt wird.
-ok unterstutzt. Die Interpretation der Antwort entspricht den
>>ja<<- und >>nein<<-Mustern, die durch Setzen der
Umgebungsvariablen >>LC_MESSAGES<< ausgewahlt wurde. Wenn die
Umgebungsvariable >>POSIXLY_CORRECT<< gesetzt ist, werden diese
Muster als die Systemdefinition einer postiven (ja) oder
negativen (nein) Anwort betrachtet. Lesen Sie die Dokumentation
des Systems fur nl_langinfo(3), insbesondere YESEXPR und NOEXPR.
Wenn >>POSIXLY_CORRECT<< nicht gesetzt ist, werden die Muster
von finds eigenem Nachrichtenkatalog genommen.
-newer unterstutzt. Falls die angegebene Datei ein symbolischer Link
ist, wird er immer zuruckverfolgt. Dies ist eine Anderung
gegenuber dem bisherigen Verhalten, das benutzt wurde, um die
maBgebliche Zeit vom symbolischen Link zu nehmen; siehe den
Abschnitt GESCHICHTE unterhalb.
-perm unterstutzt. Falls die Umgebungsvariable >>POSIXLY_CORRECT<<
nicht gesetzt ist, werden einige Modusargumente (zum Beispiel
+a+x), die in POSIX nicht gultig sind unterstutzt, um
abwartskompatibel zu sein.
Andere Pradikate
Die Pradikate -atime, -ctime, -depth, -group, -links, -mtime,
-nogroup, -nouser, -print, -prune, -size, -user und -xdev werden
alle unterstutzt.
Der POSIX-Standard spezifiziert Klammern >>(<<, >>)<<, Verneinung >>!<<
und die Operatoren >>and<< und >>or<< (-a, -o).
Alle anderen Operationen, Pradikate, Ausdrucke und so weiter sind
Erweiterungen jenseits des POSIX-Standards. Viele dieser Erweiterungen
sind jedoch nicht auf GNU-Find beschrankt.
Der POSIX-Standard erfordert, dass find Schleifen entdeckt:
Das Hilfswerkzeug find soll unendliche Schleifen entdecken, also
das Eintreten in ein bereits vorher besuchtes Verzeichns, das
ein Vorganger der zuletzt gefundenen Datei ist. Wenn es eine
Endlosschleife entdeckt, soll Find eine Diagnosenachricht auf
die Standardfehlerausgabe schreiben und entweder seine Position
in der Hierarchie wiederherstellen oder sich beenden.
GNU-find erfullt diese Anforderungen. Die Link-Anzahl von
Verzeichnissen, die Eintrage mit harten Links auf einen Vorganger
enthalten, werden oft kleiner sein, als sie andernfalls sein sollten.
Dies kann bedeuten, dass GNU-Find manchmal den Besuch eines
Unterverzeichnisses wegoptimiert, das tatsachlich ein Link zu einem
Vorganger ist. Da find nicht tatsachlich in ein solches
Unterverzeichnis eintritt, ist es erlaubt, das Ausgeben einer
Diagnosenachricht zu verhindern. Dieses Verhalten konnte jedoch ein
wenig verwirrend sein. Es ist unwahrscheinlich, dass sich tatsachlich
jemand auf dieses Verhalten verlasst. Falls die Leaf-Optimierung mit
-noleaf ausgeschaltet wurde, wird der Verzeichniseintrag immer
untersucht und die Diagnosenachricht wird an geeigneter Stelle
ausgegeben. Symbolische Links konnen nicht benutzt werden, um
Dateisystemzyklen im eigentlichen Sinn zu erzeugen, aber falls die
Optionen -L oder -follow benutzt werden, wird eine Diagnosenachricht
ausgegeben, wenn find in symbolischen Links auf eine Schleife trifft.
Wie bei harten Links, die Schleifen enthalten, wird die
Leaf-Optimierung oft bedeuten, dass find weiB, dass es stat() oder
chdir() bei einem symbolischen Link nicht aufrufen muss, daher ist
diese Diagnose haufig nicht notig.
Die Option -d wird unterstutzt, um die Kompatibilitat mit verschiedenen
BSD-Systemen zu wahren, Sie sollten aber stattdessen die POSIX-konforme
Option -depth benutzen.
Die Umgebungsvariable POSIXLY_CORRECT beeinflusst nicht das Verhalten
der Tests -regex oder -iregex, da diese Tests nicht im POSIX-Standard
spezifiziert sind.
UMGEBUNGSVARIABLEN
LANG Stellt einen Vorgabewert fur die Internationalisierungsvariablen
bereit, die nicht gesetzt oder null sind.
LC_ALL Falls dies auf einen nicht leeren Zeichenkettenwert gesetzt ist,
uberschreibt es die Werte aller anderen
Internationalisierungsvariablen.
LC_COLLATE
Der POSIX-Standard spezifiziert, dass diese Variable die
Mustersuche beeinflusst, die bei der Option -name benutzt wird.
GNU-Find benutzt die Bibiliotheksfunktion fnmatch(3) und
unterstutzt daher >>LC_COLLATE<< in Abhangigkeitt von der
Systembibliothek. Diese Variable beeinflusst auBerdem die
Interpretation der Antwort auf -ok; wahrend die Variable
>>LC_MESSAGES<< das Muster auswahlt, das tatsachlich benutzt
wird, um die Antwort auf -ok; zu interpretieren, wird die
Interpretation jeglicher Ausdrucke mit Klammern im Muster durch
>>LC_COLLATE<< beeinflusst.
LC_CTYPE
Diese Variable beeinflusst die Behandlung von Zeichenklassen,
die in regularen Ausdrucken ebenso wie im Test -name benutzt
wird, falls die Bibliotheksfunktion fnmatch(3) des Systems dies
unterstutzt. Diese Variable beeinflusst auBerdem die
Interpretation jeglicher Zeichenklassen, die in regularen
Ausdrucken benutzt werden, um die Antwort auf die durch -ok
angegebene Abfrage zu interpretieren. Die Umgebungsvariable
>>LC_CTYPE<< wird auBerdem beeinflussen, welche Zeichen als
nicht abdruckbar betrachtet werden, wenn Dateinamen ausgegeben
werden; siehe den Abschnitt UNUBLICHE DATENAMEN.
LC_MESSAGES
bestimmt die Locale, die fur internationalisierte Nachrichten
verwendet werden soll. Falls die Umgebungsvariable
>>POSIXLY_CORRECT<< gesetzt ist, bestimmt dies auBerdem die
Interpretation der Antwort auf die, durch die Aktion -ok
angegebene Abfrage.
NLSPATH
bestimmt den Speicherort der
Internationalisierungs-Nachrichtenkataloge.
PATH beeinflusst die Verzeichnisse, die durchsucht werden, um die
ausfuhrbaren Dateien zu finden, die durch -exec, -execdir, -ok
und -okdir aufgerufen werden.
POSIXLY_CORRECT
bestimmt die von -ls und -fls benutzte BlockgroBe, Falls
POSIXLY_CORRECT gesetzt ist, sind Blocke Einheiten von 512 Byte.
Andernfalls sind es Einheiten von 1024 Byte.
Das Setzen dieser Variable schaltet auBerdem standardmaBig
Warnmeldungen aus (sprich, es implziert -nowarn), da POSIX
erfordert, dass unabhangig von der Ausgabe von -ok, alle
Nachrichten auf der Standardfehlerausgabe Diagnosen sind und in
einem Ruckgabewert ungleich null resultieren mussen.
Wenn POSIXLY_CORRECT nicht gesetzt ist, wird -perm +zzz nur wie
-perm /zzz betrachtet, falls +zzz kein gultiger symbolischer
Modus ist. Wenn POSIXLY_CORRECT gesetzt ist, werden solche
Konstruktionen als Fehler betrachtet.
Wenn POSIXLY_CORRECT gesetzt ist, hangt die Interpretation der
Antwort auf die, durch die Aktion -ok angegebene Abfrage, von
den Nachrichtenkatalogen des Systems ab, im Gegensatz zur
Beachtung der eigenen Nachrichtenubersetzungen von find.
TZ beeinfluBt die Zeitzone, die fur einige zeitbezogene
Formatdirektiven von -printf und -fprintf benutzt wird.
BEISPIELE
find /tmp -name core -type f -print | xargs /bin/rm -f
sucht Dateien mit dem Namen core in oder unterhalb des Verzeichnisses
/tmp und loscht diese. Beachten Sie, dass dies nicht korrekt
funktioniert, falls die Dateinamen Zeilenvorschube, einfache oder
doppelte Anfuhrungszeichen oder Leerzeichen enthalten.
find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f
sucht Dateien mit dem Namen core in oder unterhalb des Verzeichnisses
/tmp und loscht diese. Verarbeitet Dateinamen auf eine Weise, in der
Datei- oder Verzeichnisnamen, die Dateinamen einfache oder doppelte
Anfuhrungszeichen, Leerzeichen oder Zeilenvorschube enthalten, korrekt
gehandhabt werden. Der Test -name kommt in der Reihenfolge vor dem Test
-type, um zu verhindern, dass stat(2) fur jede Datei aufgerufen wird.
find . -type f -exec file '{}' \;
fuhrt >>file<< fur jede Datei in oder unterhalb des aktuellen
Verzeichnisses aus. Beachten Sie, dass Klammern in einfache
Anfuhrungszeichen eingeschlossen werden, um sie vor einer
Interpretation als Shell-Skript-Zeichensetzung zu schutzen. Der
Strichpunkt wird gleichermaBen durch die Benutzung des
Ruckwartsschragstrichs geschutzt, da einfache Anfuhrungszeichen in
diesem Fall ebenfalls benutzt werden konnten.
find / \
\( -perm -4000 -fprintf /root/suid.txt %#m %u %p\n \) , \
\( -size +100M -fprintf /root/big.txt %-10s %p\n \)
das Dateisystem nur einmal durchlaufen, Setuid-Dateien und
Verzeichnisse in /root/suid.txt und groBe Dateien in /root/big.txt
auflisten.
find $HOME -mtime 0
sucht nach Dateien in Ihrem Home-Verzeichnis, die in den letzten 24
Stunden geandert wurden. Dieser Befehl funktioniert auf diese Art, weil
die Zeit, seit jede Datei zuletzt verandert wurde, durch 24 Stunden
geteilt und der Rest verworfen wird. Dies bedeutet, dass eine Datei, um
-mtime 0 zu entsprechen, eine Veranderung in der Vergangenheit haben
muss, die weniger als 24 Stunden zuruckliegt.
find /sbin /usr/sbin -executable \! -readable -print
sucht Dateien, die ausfuhrbar, aber nicht lesbar sind
find . -perm 664
sucht nach Dateien, die Lese- und Schreibrechte fur ihren Benutzer und
ihre Gruppe haben, aber von anderen Benutzern gelesen, aber nicht
geschrieben werden konnen. Dateien, die diesem Kriterium entsprechen,
aber andere Rechte-Bits gesetzt haben (zum Beispiel, wenn jemand die
Datei ausfuhren kann) werden nicht passen.
find . -perm -664
sucht nach Dateien, die Lese- und Schreibrechte fur ihren Benutzer und
ihre Gruppe haben und die von anderen Benutzern gelesen werden konnen,
ohne das Vorhandensein irgendwelcher zusatzlicher Rechte-Bits (zum
Beispiel des Bits fur Ausfuhrbarkeit) zu betrachten. Dies wird
beispielsweise auf eine Datei mit dem Modus 777 passen.
find . -perm /222
sucht nach Dateien, die fur jedermann schreibbar sind (ihren Besitzer,
ihre Gruppe oder irgendjemand anderes).
find . -perm /220
find . -perm /u+w,g+w
find . -perm /u=w,g=w
Diese drei Befehle tun alle dasselbe, aber der Erste benutzt die oktale
Darstellung des Dateimodus und die beiden anderen benutzen die
symbolische Form. Diese Befehle suchen alle nach Dateien, die entweder
durch ihren Besitzer oder ihre Gruppe schreibbar sind. Die Dateien
mussen nicht sowohl fur Besitzer und Gruppe schreibbar sein, um zu
passen; eines genugt.
find . -perm -220
find . -perm -g+w,u+w
Beide Befehle tun dasselbe; sie suchen nach Dateien, die sowohl fur
ihren Besitzer als auch fur ihre Gruppe schreibbar sind.
find . -perm -444 -perm /222 ! -perm /111
find . -perm -a+r -perm /a+w ! -perm /a+x
Diese beiden Befehle suchen nach Dateien, die fur jedermann lesbar sind
(-perm -444 oder -perm -a+r), mindestens ein gesetztes Schreib-Bit
haben (-perm /222 oder -perm /a+w), aber fur niemanden ausfuhrbar sind
(! -perm /111 beziehungsweise ! -perm /a+x).
cd /source-dir
find . -name .snapshot -prune -o \( \! -name *~ -print0 \)|
cpio -pmd0 /dest-dir
Dieser Befehl kopiert den Inhalt von /source-dir nach /dest-dir, lasst
aber Dateien und Verzeichnisse mit Namen .snapshot aus (und alles, was
sich darin befindet). Er lasst auBerdem alle Dateien und Verzeichnisse
aus, deren Name auf ~ endet, nicht jedoch ihren Inhalt. Die
Konstruktion -prune -o \( ... -print0 \) ist ziemlich gebrauchlich. Die
Idee besteht hier darin, dass der Ausdruck vor -prune auf die Dinge
passt, die gekurzt werden. Die Aktion -prune selbst gibt jedoch wahr
zuruck, daher stellt das folgende -o sicher, dass die rechte Seite nur
fur die Verzeichnisse ausgewertet wird, die nicht gekurzt wurden (der
Inhalt der gekurzten Verzeichnisse wird nicht einmal besucht und ist
daher irrelevant). Der Ausdruck auf der rechten Seite von -o ist nur
der Ubersichtlichkeit halber in Klammern. Dies hebt hervor, dass die
Aktion -print0 nur den Platz von Dingen einnimmt, auf die -prune nicht
angewandt wurde. Da die Standardbedingung >>and<< zwischen Tests fester
verbindet als -o, ist dies sowieso die Vorgabe, aber die Klammern
helfen zu zeigen, was passiert.
find repo/ -exec test -d {}/.svn -o -d {}/.git -o -d {}/CVS ; \
-print -prune
Beim folgenden gegebenen Verzeichnis mit Projekten und den damit
verbundenen Versionsverwaltungsverzeichnissen wird eine effiziente
Suche nach den Wurzeln der Projekte durchgefuhrt:
repo/project1/CVS
repo/gnu/project2/.svn
repo/gnu/project3/.svn
repo/gnu/project3/src/.svn
repo/project4/.git
In diesem Beispiel verhindert -prune unnotiges Absteigen in
Verzeichnisse, die bereits entdeckt wurden (zum Beispiel wird
project3/src nicht durchsucht, da es bereits in project3/.svn gefunden
wurde), aber es stellt sicher, dass Geschwisterverzeichnisse (project2
und project3) gefunden werden.
R"UCKGABEWERT
find endet mit Status Null, falls alle Dateien erfolgreich verarbeitet
wurden und groBer als Null, falls ein Fehler aufgetreten ist. Dies ist
absichtlich eine sehr weitgehende Beschreibung, aber falls der
Ruckgabewert ungleich Null ist, sollten Sie sich nicht auf die
Richtigkeit des Ergebnisses von find verlassen.
SIEHE AUCH
chmod(1), locate(1), ls(1), updatedb(1), xargs(1), lstat(2), stat(2),
ctime(3), fnmatch(3), printf(3), locatedb(5), strftime(3), regex(7),
Finding Files (online in Info oder ausgegeben).
GESCHICHTE
Ab findutils-4.2.2 stimmen Shell-Metazeichen (>>*<<, >>?<< oder >>[]<<
zum Beispiel), die in Mustern fur Dateinamen verwendet werden, mit
einem fuhrenden >>.<< uberein, da die Interpretation 126 von IEEE POSIX
dies erfordert.
Die Syntax -perm +MODE wurde in findutils-4.2.21 zugunsten von -perm
/MODUS missbilligt. Ab findutils-4.3.3 passt -perm /000 nun auf alle
Dateien statt auf keine.
Zeitstempel in Nanosekundenauflosung wurden in findutils-4.3.3
implementiert.
Ab findutils-4.3.11 setzt die Aktion -delete den Ruckgabewert von find
auf einen Wert ungleich null, wenn sie fehlschlagt. find wird jedoch
nicht sofort beendet. Vorher wurde der Ruckgabewert von find nicht
durch ein Scheitern von -delete beeinflusst.
Funktion Hinzugefugt in Erscheint auch in
-newerXY 4.3.3 BSD
-D 4.3.1
-O 4.3.1
-readable 4.3.0
-writable 4.3.0
-executable 4.3.0
-regextype 4.2.24
-exec + 4.2.12 POSIX
-execdir 4.2.12 BSD
-okdir 4.2.12
-samefile 4.2.11
-H 4.2.5 POSIX
-L 4.2.5 POSIX
-P 4.2.5 BSD
-delete 4.2.3
-quit 4.2.3
-d 4.2.3 BSD
-wholename 4.2.0
-iwholename 4.2.0
-ignore_readdir_race 4.2.0
-fls 4.0
-ilname 3.8
-iname 3.8
-ipath 3.8
-iregex 3.8
KEINE FEHLER
$ find . -name *.c -print
find: Pfad muss vor dem Ausdruck stehen
Aufruf: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [Pfad ] [Ausdruck]
Dies geschieht, da *.c durch die Shell expandiert wurde, was dazu
fuhrt, dass find tatsachlich eine Befehlszeile wie diese bekommt:
find . -name bigram.c code.c frcode.c locate.c -print
Der Befehl wird sicherlich nicht funktionieren. Statt dies auf diese
Weise zu tun, sollten Sie die Muster in Anfuhrungszeichen setzen oder
den Platzhalter maskieren.
$ find . -name \*.c -print
FEHLER
Es gibt dort Sicherheitslucken, die dem Verhalten anhaften, das der
POSIX-Standard fur find spezifiziert und die daher nicht behoben werden
konnen. Die Aktion -exec ist zum Beispiel von Natur aus unsicher und es
sollte stattdessen -execdir verwandt werden. Bitte lesen Sie den
Abschnitt Finding Files, um weitere Informationen zu erhalten.
Die Umgebungsvariable LC_COLLATE hat keinen Einfluss auf die Aktion
-ok.
Der beste Weg, einen Fehler zu melden, ist die Benutzung des Formulars
auf http://savannah.gnu.org/bugs/?group=findutils. Der Grund dafur
liegt darin, dass Sie den Prozess, wie das Problem behoben wird,
verfolgen konnen. Andere Kommentare uber find(1) und uber das Paket
Findutils im Allgemeinen konnen an die Mailingliste bug-findutils
gesandt werden. Um diese Liste zu abonnieren, senden Sie eine E-Mail
auf Englisch an bug-findutils-request@gnu.org.
"UBERSETZUNG
Die deutsche Ubersetzung dieser Handbuchseite wurde von Chris Leick
<c.leick@vollbio.de> erstellt.
Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General
Public License Version 3 oder neuer bezuglich der Copyright-
Bedingungen. Es wird KEINE HAFTUNG ubernommen.
Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden,
schicken Sie bitte eine E-Mail an <debian-l10n-
german@lists.debian.org>.
FIND(1)