find - in einer Verzeichnishierarchie nach Dateien suchen
find [-H] [-L] [-P] [-D Fehlersuchoptionen] [-OStufe] [Startpunkt
…] [Ausdruck]
Diese Handbuchseite beschreibt die GNU-Version von
find. GNU-
find
durchsucht die Verzeichnisbäume, die ihren 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 für
UND-Operatoren und wahr für
ODER-Operatoren).
Anschließend fährt
find mit der nächsten Datei
fort. Wird kein Startpunkt angegeben, wird ».« angenommen.
Falls Sie
find in einem Umfeld benutzen, in dem Sicherheit wichtig ist
(zum Beispiel, um Verzeichnisse zu durchsuchen, die für andere Anwender
schreibbar sind), sollten Sie das Kapitel »Security
Considerations« der Findutils-Dokumentation lesen, die
Finding
Files heißt und den Findutils beigefügt ist. Dieses Dokument
enthält außerdem mehr Einzelheiten und Erörterungen als
diese Handbuchseite, so dass Sie es als eine nützlichere
Informationsquelle empfinden könnten.
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
Ausdrücken. Diese Optionen steuern das Verhalten von
find,
werden aber direkt nach dem letzten Pfadnamen angegeben. Die fünf
»echten« Optionen
-L,
-P,
-D und
-O
müssen wenn dann vor dem ersten Pfadnamen erscheinen. Außerdem
könnte ein doppeltes Minuszeichen
-- theoretisch benutzt werden,
um zu signalisieren, dass die verbleibenden Argumente keine Optionen sind,
aber das funktioniert nicht wirklich, da
find das Ende der folgenden
Pfadargumente ermittelt: Es liest bis zu einem Ausdrucksargument (das auch mit
»-« beginnt). Falls nun ein Pfadargument mit einem
»-« beginnen würde, dann würde
find dieses
stattdessen als Ausdrucksargument auffassen. Um sicher zu stellen, dass alle
Startpunkte als solche aufgefasst werden, und insbesondere um zu verhindern,
dass durch die aufrufende Shell expandierte Platzhaltermuster
fälschlicherweise als Ausdrucksargumente interpretiert werden, ist es
daher im Allgemeinen sicherer, Platzhaltern oder fragwürdigen Pfadnamen
entweder »./« voranzustellen oder absolute Pfadnamen zu
verwenden, die mit »/« beginnen. Alternativ ist es generell
sicher, die (allerdings unportable) GNU-Option
-files0-from
hinzuzufügen, mit der Sie beliebige Startpunkte an
find
übergeben können.
- -P
- keinen symbolischen Links folgen. Dies ist das
Standardverhalten. Wenn find Dateien untersucht oder Informationen
über diese ausgibt und die Datei ein symbolischer Link ist, dann
müssen die Informationen des symbolischen Links selbst verwendet
werden.
- -L
- symbolischen Links folgen. Wenn find eine Datei
untersucht oder Informationen über diese ausgibt, dann
müssen 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 später die Option
-P verwenden, wird -noleaf immer noch Auswirkungen haben.
Wenn -L aktiv ist und find während 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
Prädikat -type immer auf den Typ der Datei angewendet, auf
die ein symbolischer Link zeigt, anstatt auf den Link selbst (es sei denn,
der symbolische Link ist kaputt). Aktionen die symbolische Links
zerstören, während find ausgeführt wird (zum
Beispiel -delete), können verwirrendes Verhalten
verursachen. Die Verwendung von -L bewirkt, dass die
Prädikate -lname und -ilname immer falsch
zurückliefern.
- -H
- keinen symbolischen Links folgen, es sei denn, die
Parameter in der Befehlszeile werden ausgewertet. Wenn find Dateien
untersucht oder Informationen über diese ausgibt, müssen 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 über den Link selbst dienen als
Rückgriff für 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 natürlich -maxdepth 0
verhindern würde).
Falls mehr als eine der Optionen
-H,
-L und
-P angegeben
ist, setzt jedes die anderen außer 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 wäre
dies angegeben worden.
GNU-
find fragt oft Datei-Informationen während 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 für 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
über ausreichende Rechte verfügt oder der Link auf eine nicht
existierende 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
Erwägungen gelten für
-newerXY,
-anewer und
-cnewer.
Die Option
-follow hat ähnliche 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
möchten. Die Liste der Debug-Optionen sollte durch Kommas getrennt
sein. Kompatibilität der Debug-Optionen ist zwischen den
unterschiedlichen Versionen der Findutils nicht gewährleistet. Um
eine vollständige Liste der gültigen Optionen zu erhalten,
lesen Sie die Ausgabe von find -D help. Gültige
Debug-Optionen sind unter anderem:
- exec
- zeigt Diagnostikinformationen mit Bezug zu -exec, -execdir,
-ok und -okdir an.
- opt
- gibt Diagnoseinformationen bezüglich der Optimierung
des Ausdrucksbaums aus; siehe die Option -O.
- rates
- gibt eine Zusammenfassung aus, die angibt, wie oft jedes
Prädikat erfolgreich war oder fehlschlug.
- search
- durchläuft den Verzeichnisbaum
ausführlich.
- stat
- meldet, wenn Dateien mit den Systemaufrufen stat und
lstat untersucht werden. Das Programm find versucht, die
Anzahl solcher Aufrufe zu minimieren.
- tree
- zeigt den Ausdrucksbaum in seiner originalen und
optimierten Form.
- all
- aktiviert alle anderen Debug-Optionen (außer
help).
- help
- erklärt die Debugging-Optionen.
- -OStufe
- aktiviert Abfragenoptimierung. Das Programm find
ordnet Tests neu an, um die Ausführung zu beschleunigen, ohne das
Gesamtergebnis zu ändern; das heißt, Prädikate mit
Seiteneffekten werden im Gegensatz zu anderen nicht neu angeordnet. Die
Optimierungen die auf jeder Optimierungsstufe durchgeführt werden,
sind wie folgt.
- 0
- entspricht der Optimierungsstufe 1
- 1
- Dies ist die Standardoptimierungsstufe und entspricht dem
traditionellen Verhalten. Ausdrücke werden neu angeordnet, so dass
Tests, die nur auf den Namen der Dateien basieren (zum Beispiel
-name und -regex) zuerst durchgeführt werden.
- 2
- Irgendwelche -type- oder -xtype-Tests werden
nach allen Tests, die nur auf Dateinamen basieren, aber vor Tests, die
Informationen aus dem Inode benötigen, durchgeführt. Auf
vielen modernen Versionen von Unix werden Dateitypen durch
readdir() zurückgegeben und daher sind diese
Prädikate schneller auszuwerten als Prädikate, die zuerst
stat für die Datei ausführen müssen. Wenn Sie
beim Start von find das Prädikat FOO für
-fstype verwenden und einen unbekannten Dateisystemtyp FOO
angeben (in »/etc/mtab« aufgeführt), entspricht dies
dem Prädikat -false.
- 3
- Auf dieser Optimierungsstufe ist der vollständig
kostenbasierte Optimierer aktiviert. Die Reihenfolge der Tests wird
geändert, so dass günstige (d.h. schnelle) Tests zuerst und
die teureren später durchgeführt werden, falls nötig.
Innerhalb jeder Kostenebene werden Prädikate früher oder
später ausgewertet, je nachdem, ob sie wahrscheinlich erfolgreich
sein werden oder nicht. Für -o werden Prädikate, die
wahrscheinlich erfolgreich sind, früher ausgewertet und für
-a werden Prädikate, die wahrscheinlich fehlschlagen,
früher ausgewertet.
- Der kostenbasierte Optimierer hat eine feste Vorstellung
davon, wie wahrscheinlich ein gegebener Test erfolgreich ist. In einigen
Fällen trägt 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
zuverlässig, 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-Veröffentlichungsserie geändert. Die Test-Suite
Findutils führt all die Tests auf find auf jeder
Optimierungsstufe aus und stellt sicher, dass das Ergebnis das Gleiche
ist.
Der Teil der Befehlszeile nach der Liste der Startpunkte ist der
Ausdruck. Dies ist eine Abfragespezifikation, die die Suche nach
übereinstimmenden Dateien und den Umgang mit den gefundenen Dateien
beschreibt. Ein Ausdruck ist eine Abfolge von:
- Tests
- Tests geben »wahr« oder
»falsch« zurück, normalerweise auf Basis einer
Eigenschaft einer zu berücksichtigenden Datei. Der Test
-empty beispielsweise gibt »wahr« zurück, wenn
die Datei leer ist.
- Aktionen
- Aktionen haben Folgeeffekte (zum Beispiel Meldungen in der
Standardausgabe) und geben entweder »wahr« oder
»falsch« zurück, abhängig davon, ob die Aktion
erfolgreich war oder nicht. Die Aktion -print beispielsweise gibt
den Namen der aktuellen Datei in der Standardausgabe aus.
- Globale Optionen
- Globale Optionen beeinflussen die Wirkung der Tests und
Aktionen, die als Teil der Befehlszeile angegeben werden. Globale Optionen
geben stets »wahr« zurück. Die Option -depth
beispielsweise durchsucht das Dateisystem in der angegebenen Tiefe.
- Positionsoptionen
- Positionsoptionen beeinflussen nur Tests, die darauf
folgen. Positionale Optionen geben stets »wahr«
zurück. Die Option -regextype beispielsweise ist positional.
Sie gibt den »Dialekt« der regulären Ausdrücke
an, die danach in der Befehlszeile angegeben werden.
- Operatoren
- Operatoren verbinden die anderen Elemente innerhalb des
Ausdrucks. Beispielsweise stellen -o ein logisches ODER und
-a ein logisches UND dar. Fehlt ein Operator, wird -a
angenommen.
Die Aktion
-print wird auf allen Dateien, für die der gesamte
Ausdruck zutrifft, durchgeführt, außer sie enthält eine
von
-prune oder
-quit abweichende Aktion. Aktionen, die die
Vorgabe
-print blockieren sind
-delete,
-exec,
-execdir,
-ok,
-okdir,
-fls,
-fprint,
-fprintf,
-ls,
-print und
-printf.
Die Aktion
-delete wirkt auch wie eine Option (da sie
-depth
impliziert).
Positionsoptionen geben stets »wahr« zurück. Sie
beeinflussen nur Tests, die danach in der Befehlszeile aufgeführt
werden.
- -daystart
- misst Zeiten (für -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.
- -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, ändert die Position von -follow das
Verhalten des Prädikats -newer. Alle Dateien, die als
Argumente von -newer aufgezählt werden, werden
dereferenziert, wenn es sich bei ihnen um symbolische Links handelt. Das
gilt auch für -anewer und -cnewer. Ähnlich
wird das Prädikat -type immer auf den Typ der Datei
angewendet, auf den der symbolische Link zeigt und nicht auf den Link
selbst. Die Verwendung von -follow hat zur Folge, dass die
Prädikate -lname und -ilname immer falsch
zurückliefern.
- -regextype Typ
- Ändert die Syntax regulärer Ausdrücke,
die von -regex- und -iregex-Tests verstanden werden, die
später auf der Befehlszeile auftreten. Die bekannten Ausdruckstypen
können Sie mit -regextype help anzeigen lassen. Das
Texinfo-Handbuch (Abschnitt SIEHE AUCH) erklärt die Bedeutung
verschiedener Typen regulärer Ausdrücke und deren
Unterschiede.
- -warn, -nowarn
- schaltet Warnungen ein oder aus. Diese Warnungen betreffen
nur die Benutzung der Befehlszeile, nicht für irgendwelche
Bedingungen, auf die find beim Durchsuchen von Verzeichnissen
stoßen könnte. Das Standardverhalten entspricht
-warn, falls die Standardeingabe ein Terminal ist und andernfalls
-nowarn. Wenn eine Warnmeldung relativ zur Befehlsausführung
erzeugt wird, dann wird der Exit-Status von find davon nicht
beeinflusst. Ist die Umgebungsvariable POSIXLY_CORRECT gesetzt und
-warn wird ebenfalls verwendet, dann kann nicht exakt bestimmt
werden, welche Warnungen aktiv sind, falls Warnmeldungen auftreten.
Globale Optionen geben stets »wahr« zurück. Sie wirken sich
auch auf Tests aus, die davor in der Befehlszeile stehen. Um Verwirrung
vorzubeugen, sollten globale Optionen in der Befehlszeile nach der Liste der
Startpunkte angegeben werden, vor dem ersten Test, der ersten Positionsoption
oder der ersten Aktion. Wenn Sie eine globale Option an einer anderen Stelle
angeben, gibt
find eine Warnung aus, dass dies verwirrend sein
könnte.
Die globalen Optionen erscheinen nach der Liste der Startpunkte. Daher sind sie
nicht von der gleichen Art wie beispielsweise die Option
-L.
- -d
- ein Synonym für -depth, für die
Kompatibilität mit FreeBSD, NetBSD, MacOS X und OpenBSD.
- -depth
- bearbeitet den Inhalt jedes Verzeichnisses vor dem
Verzeichnis selbst. Die Aktion -delete impliziert ebenfalls -depth.
- -files0-from Datei
- liest die Startpunkte aus der angegebenen Datei
statt aus der Befehlszeile. Mit dieser Option können Sie eine
beliebige Anzahl von Startpunkten sicher an find übergeben;
sie umgehen damit die bekannten Einschränkungen beim
Übergeben von Startpunkten in der Befehlszeile, nämlich die
Beschränkung der Anzahl der Dateinamen und die Möglichkeit
der Verwechslung von Datei- und Optionsnamen.
Mit dieser Option ist es nicht möglich, außerdem noch
Dateinamen in der Befehlszeile zu übergeben. Beides gleichzeitig
ist daher nicht erlaubt.
Das Datei-Argument ist zwingend erforderlich. Sie können
-files0-from - zum Lesen der Liste der Startpunkte aus dem
Datenstrom der Standardeingabe und beispielsweise einer Pipe
verwenden. In diesem Fall sind die Aktionen -ok und -okdir
nicht zulässig, da sie mit dem Lesen aus der Standardeingabe
kollidieren würden, wo eine Bestätigung seitens des
Benutzers nicht möglich wäre.
Die Startpunkte in der angegebenen Datei müssen durch
ASCII-Nullbyte-Zeichen getrennt werden. Zwei aufeinanderfolgende
Nullbyte-Zeichen, beispielsweise ein Startpunkt mit einem Dateinamen der
Länge Null, sind nicht erlaubt. Dies würde später zu
einem Fehler mit einem von Null verschiedenen Exit-Code führen.
Falls die angegebene Datei leer ist, verarbeitet find
keinerlei Startpunkte und beendet sich daher unmittelbar nach dem
Auswerten der Programmargumente. Dies steht im Gegensatz zum
Standardaufruf, bei dem find ohne übergebenes Pfad-Argument
annimmt, dass das aktuelle Verzeichnis der Startpunkt ist.
Die Verarbeitung der Startpunkte geschieht ansonsten wie üblich, das
heißt beispielsweise, dass find in Unterverzeichnisse
absteigt, sofern es nicht anderweitig daran gehindert wird. Um lediglich
die Startpunkte verarbeiten zu lassen, können Sie zusätzlich
-maxdepth 0 übergeben.
Weitere Hinweise: Falls eine Datei in der Eingabedatei mehrmals
aufgeführt ist, ist nicht definiert, ob diese tatsächlich
mehrmals ausgewertet wird. Auch wenn sich eine Datei während
der Ausführung von find ändert, ist das Ergebnis
nicht definiert. Letztendlich betrifft das auch die Suchposition innerhalb
der angegebenen Datei, sei es mit -quit oder auf andere
Weise. »Nicht definiert« bedeutet hierbei, dass es
funktionieren kann, aber nicht muss und möglicherweise ein
bestimmtes Ergebnis liefert, was aber wiederum auf verschiedenen
Plattformen nicht zwangsläufig gleich sein muss und auch zwischen
verschiedenen Versionen der findutils variieren kann.
- -help, --help
- gibt eine Zusammenfassung der Verwendung von find
aus und wird beendet
- -ignore_readdir_race
- Normalerweise wird find eine Fehlermeldung ausgeben,
wenn das Ausführen von Stat für eine Datei
fehlschlägt. Falls Sie diese Option angeben und eine Datei in der
Zeit zwischen dem Lesen des Namens im Verzeichnis durch find und
der Zeit gelöscht wurde, in der Stat für die Datei
ausgeführt wird, wird keine Fehlermeldung ausgegeben. Dies gilt
auch für 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 können, bei dem diese Option eingeschaltet
ist und einen Teil, bei dem diese Option ausgeschaltet ist (falls Sie dies
tun müssen, werden Sie stattdessen zwei find-Befehle
absetzen müssen, einen mit und einen ohne der Option.
Desweiteren wird find mit der Option -ignore_readdir_race
Fehler der Aktion -delete ignorieren, falls die Datei verschwunden
ist, seit das Elternverzeichnis gelesen wurde: es wird keine
Fehlerdiagnosen ausgeben und der Rückkehr-Code der Aktion
-delete wird wahr sein.
- -maxdepth Ebenen
- steigt höchstens Ebenen (eine nicht negative
Ganzzahl) Ebenen im Verzeichnisbaum unterhalb der Startpunkte hinab.
-maxdepth 0 bedeutet, dass die Tests und Aktionen nur auf
die Startpunkte angewendet 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
Startpunkte selbst verarbeitet werden.
- -mount
- keine Verzeichnisse auf anderen Dateisystemen hinabsteigen.
Ein alternativer Name für -xdev aus
Kompatibilitätsgründen 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 benötigt, wenn Dateisysteme durchsucht werden, die
nicht den Konventionen von Unix-Verzeichnis-Links folgen, wie CD-ROM-,
MS-DOS-Dateisysteme oder AFS-Datenträgereinhängepunkte.
Jedes Verzeichnis auf einem normalen Unix-Dateisystem hat mindestens zwei
harte Links: seinen Namen und seinen ».«-Eintrag.
Zusätzlich haben seine Unterverzeichnisse (falls vorhanden) jeweils
einen »..«-Eintrag, der auf dieses Verzeichnis verweist.
Wenn find ein Verzeichnis untersucht, weiß es, nachdem es
zwei Unterverzeichnissen weniger als der Links-Anzahl des Verzeichisses
begegnet ist, dass der Rest der Einträge des Verzeichnisses keine
Verzeichnisse sind (Blätter im Verzeichnisbaum). Falls nur die
Namen der Dateien untersucht werden müssen, gibt es keinen Grund
Stat für sie auszuführen; dies führt zu einer
spürbaren Erhöhung der Suchgeschwindigkeit.
- -version, --version
- gibt die Versionsnummer von find aus und wird
beendet
- -xdev
- keine Verzeichnisse auf anderen Dateisystemen hinabsteigen
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) dafür
fehlschlägt), wird eine Fehlermeldung ausgegeben und
find endet
mit einem Status ungleich null.
Ein numerisches Argument
n kann an die Tests übergeben werden (wie
-amin,
-mtime,
-gid,
-inum,
-links,
-size,
-uid und
-used), als
- +n
- für größer als n,
- -n
- für kleiner als n,
- n
- für genau n
Unterstützte Tests:
- -amin n,
- Auf die Datei wurde zuletzt vor weniger als, mehr als oder
genau n Minuten zugegriffen.
- -anewer Bezug
- Die Zeit des letzten Zugriffs auf die aktuelle Datei ist
neuerer als die der letzten Veränderung der Bezugsdatei.
Falls Bezug ein symbolischer Link ist und die Optionen -H
oder -L in Kraft sind, wird immer die Zeit der letzten
Datenveränderung der Datei benutzt, auf die er zeigt.
- -atime n
- Auf die Datei ist vor weniger als, mehr als oder genau
n*24 Stunden zugegriffen worden. Wenn Find herausfindet, wieviele
24-Stundenzeiträume 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 weniger als, mehr als oder
genau n Minuten geändert.
- -cnewer Bezug
- Die Zeit der letzten Statusänderung der aktuellen
Datei ist neuerer als die der letzten Datenveränderung der
Bezugsdatei. Falls Bezug ein symbolischer Link ist und die
Optionen -H oder -L in Kraft sind, wird immer die Zeit der
letzten Datenveränderung der Datei benutzt, auf den er zeigt.
- -ctime n
- Der Dateistatus wurde zuletzt vor weniger als, mehr als
oder genau n*24 Stunden geändert. Lesen Sie die Kommentare
zu -atime, um zu verstehen, wie Rundung die Interpretation der
Dateistatus-Änderungszeiten beeinflusst.
- -empty
- Die Datei ist leer und entweder eine reguläre Datei
oder ein Verzeichnis.
- -executable
- passt auf ausführbare Dateien und durchsuchbare
Verzeichnisse (im Sinn der Namensauflösung) des aktuellen
Benutzers. Dies berücksichtigt 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 getäuscht werden,
die Abbildung der UID (oder Root-Squashing) nutzen, da viele Systeme
access(2) im Kernel des Clients implementieren und daher von den
Abbildungsinformationen der UID keinen Gebrauch machen können, die
auf dem Server gehalten werden. Da dieser Test nur auf dem Ergebnis des
Systemaufrufs access(2) basiert, gibt es keine
Gewährleistung, dass eine Datei, bei der dieser Test erfolgreich
war, tatsächlich ausgeführt werden kann.
- -false
- Immer falsch
- -fstype Typ
- Die Datei liegt auf einem Dateisystem des Typs Typ.
Die gültigen Dateisystemtypen variieren zwischen verschiedenen
Versionen von Unix; eine unvollständige 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 können
-printf mit der Option %F benutzen, um die Typen Ihrer Dateisysteme
zu sehen.
- -gid n
- Die numerische Gruppenkennung der Datei ist kleiner als,
größer als oder genau n.
- -group gname
- Datei gehört der Gruppe Gruppenname
(numerische Gruppenkennungen erlaubt).
- -ilname Muster
- wie -lname, aber der Treffer berücksichtigt
keine Groß-/Kleinschreibung. Falls die Option -follow in
Kraft ist, gibt dieser Test falsch zurück, außer wenn der
symbolische Link kaputt ist.
- -iname Muster
- Funktioniert genauso wie -name ohne jedoch
Groß- und Kleinschreibung zu berücksichtigen. Zum Beispiel
werden die Muster »fo*« und »F??« beide die
Dateien »Foo«, »FOO«, »foo«,
»fOo« usw. finden. Das Muster *bar wird auch Dateien
wie ».foobar« finden.
- -inum n
- Die Inode-Nummer der Datei ist kleiner als,
größer als oder genau n. Es ist normalerweise
einfacher, stattdessen den Test -samefile zu benutzen.
- -ipath Muster
- wie -path, aber der Treffer berücksichtigt
keine Groß-/Kleinschreibung
- -iregex Muster
- wie -regex, aber der Treffer berücksichtigt
keine Groß-/Kleinschreibung
- -iwholename Muster
- Siehe -ipath. Diese Alternative ist nicht so
portierbar wie -path.
- -links n
- Datei hat weniger als, mehr als oder genau n harte
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
zurück, außer wenn der symbolische Link kaputt ist.
- -mmin n
- Daten der Datei wurden zuletzt vor weniger als, mehr als
oder genau n Minuten verändert.
- -mtime n
- Daten der Datei wurden zuletzt vor weniger als, mehr als
oder genau n*24 Stunden verändert. Lesen Sie die Kommentare
zu -atime, um zu verstehen, wie Rundung die Interpretation der
Dateiänderungszeiten beeinflusst.
- -name Muster
- Der Dateiname ohne führende Verzeichnisse (basename)
passt zum Shell-Muster Muster. Da die führenden
Verzeichnisse entfernt sind, enthalten die für die
Übereinstimmungsfindung mit -name berücksichtigten
Dateinamen niemals einen Schrägstrich, daher wird »-name
a/b« niemals einen Treffer ergeben. Wahrscheinlich werden Sie
stattdessen -path benutzen müssen. Eine Warnung wird
ausgegeben, wenn Sie dies zu tun versuchen, es sei denn, die
Umgebungsvariable POSIXLY_CORRECT ist gesetzt. Die Metazeichen
(»*«, »?« und »[]«) entsprechen
einem ».« am Anfang des Basisnamens (dies ist eine
Änderung in findutils-4.2.2; siehe Abschnitt
STANDARDKONFORMITÄT unten). Um ein Verzeichnis und die Dateien
darin zu ignorieren, benutzen Sie -prune statt jede Datei in dem
Baum zu überprüfen; ein Beispiel finden Sie in der
Beschreibung dieser Aktion. Klammern werden nicht als etwas Besonderes
erkannt, trotz der Tatsache, dass einige Shells einschließlich der
Bash Klammern eine besondere Bedeutung innerhalb von Shell-Mustern
beimessen. Der Dateinamensabgleich wird unter Benutzung der
Bibliotheksfunktion fnmatch(3) durchgeführt. Vergessen Sie
nicht, das Muster in Anführungszeichen zu setzen, um es vor
Expandierung durch die Shell zu schützen.
- -newer Bezug
- Die Zeit der letzten Datenveränderung der aktuellen
Datei ist neuerer als die der letzten Datenveränderung der
Bezugsdatei. Falls Bezug ein symbolischer Link ist und die
Optionen -H oder -L in Kraft sind, wird immer die Zeit der
letzten Datenveränderung der Datei benutzt, auf den er verweist.
- -newerXY Bezug
- Dies ist erfolgreich, wenn der Zeitstempel X der
Datei als neuer als der der Datei Y der Datei Bezug erkannt
wird. Die Zeichen X und Y sind aus folgenden Buchstaben frei
wählbar:
a |
Die Zugriffszeit der Datei Bezug
|
B |
Die Erstellungszeit der Datei Bezug
|
c |
Die Inode-Statusänderungszeit von Bezug
|
m |
Die Änderungszeit der Datei Bezug
|
t |
Bezug wird direkt als eine Zeit interpretiert |
Einige Kombinationen sind ungültig. So darf X bespielsweise
nicht t sein. Einige Kombinationen sind nicht auf allen Systemen
implementiert. B wird beispielsweise nicht von allen Systemen
unterstützt. Falls eine ungültige oder nicht
unterstützte Kombination von XY angegeben wurde, kommt es
dadurch zu einem schwerwiegenden Fehler. Zeitangaben werden
diesbezüglich 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 über einen
schwerwiegenden Fehler. Falls Sie einen Test angeben, der sich auf die
Erstellungszeit der Dateien bezieht, die untersucht werden, wird dieser
Test für jene Dateien fehlschlagen, deren Erstellungszeit nicht
bekannt ist.
- -nogroup
- Der numerische Gruppenkennung der Datei entspricht keiner
Gruppe.
- -nouser
- Die numerische Benutzerkennung der Datei gehört 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"
Gibt einen Eintrag für ein Verzeichnis namens ./src/misc
(falls es existiert) aus. Um ein gesamtes Verzeichnis zu ignorieren,
benutzen Sie -prune, statt jede Datei in dem Baum zu
überprüfen. Beachten Sie, dass Mustervergleichstests auf den
ganzen Dateinamen angewendet werden, beginnend von einem der auf der
Befehlszeile benannten Startpunkte. Es würde nur Sinn ergeben, hier
einen absoluten Pfadnamen zu benutzen, wenn der maßgebliche
Startpunkt auch ein absoluter Pfad wäre. Dies bedeutet, dass dieser
Befehl niemals auf etwas zutreffen wird:
find bar -path /foo/bar/myfile -print
Find vergleicht das Argument -path mit der Verkettung eines
Verzeichnisnamens mit dem Basisnamen der Datei, die es untersucht. Da die
Verkettung nie mit einem Schrägstrich endet, werden
-path-Argumente mit einem solchen Schrägstrich am Ende nie
als Treffer gewertet (außer wenn vielleicht ein Startpunkt in der
Befehlszeile angegeben wird). -path wird auch von find in
HP-UX unterstützt und ist Teil des Standards POSIX 2008.
- -perm Modus
- Die Zugriffsrechte der Datei entsprechen exakt dem
Modus (oktal oder symbolisch). Da exakte Übereinstimmung
nötig ist, wenn Sie diese Form für symbolische Modi benutzen
möchten, müssen Sie möglicherweise 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
möchten, 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 für diese Datei
gesetzt. Symbolische Modi werden in dieser Form akzeptiert. Dies ist
üblicherweise die Art, auf die Sie sie benutzen möchten. Sie
müssen »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 für diese
Datei gesetzt. Symbolische Modi werden in dieser Form akzeptiert. Sie
müssen »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 durchgängige
Verhalten zu -perm -000).
- -perm +Modus
- Dies wird nicht mehr unterstützt und wurde bereits
2005 als veraltet markiert. Verwenden Sie stattdessen -perm
/Modus.
- -readable
- trifft auf durch den aktuellen Benutzer lesbare Dateien zu.
Dies berücksichtigt 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 getäuscht werden, die Abbildung der UID (oder
Root-Squashing) nutzen, da viele Systeme access(2) im Kernel des
Clients implementieren und daher von den Abbildungsinformationen der UID
keinen Gebrauch machen können, die auf dem Server gehalten werden.
- -regex Muster
- der Dateiname passt zu dem regulären Ausdruck
Muster. Dies ist ein Treffer auf den gesamten Pfad, keine Suche. Um
beispielsweise eine Datei mit dem Namen ./fubar3 zu finden,
können Sie die regulären Ausdrücke
».*bar.« oder ».*b.*3« benutzen, aber nicht
»f.*r3«. Die regulären Ausdrücke, die
find versteht, sind standardmäßig reguläre
Ausdrücke von Emacs (außer dass ».« auf
Zeilenumbruch passt), dies kann aber mit der Option -regextype
geändert 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 weniger als, mehr als oder genau n
Speichereinheiten (aufgerundet). Die folgenden Endungen können
benutzt werden:
- »b«
- für 512-Byte-Blöcke (dies ist die Vorgabe,
wenn keine Endung benutzt wird)
- »c«
- für Byte
- »w«
- für Wörter aus zwei Byte
- »k«
- für Kibibyte (KiB, Einheiten aus 1024 Byte)
- »M«
- für Mebibyte (MiB, Einheiten aus 1024 * 1024 =
1048576 Byte)
- »G«
- für Gibibyte (GiB, Einheiten aus 1024 * 1024 * 1024
= 1073741824 Byte)
- Die Größe ist einfach das Mitglied
»st_size« der Struktur stat, das von dem Systemaufruf lstat
(oder stat) befüllt wird. Es wird wie oben beschrieben gerundet.
Mit anderen Worten, es ist mit dem Ergebnis des Aufrufs von
ls -l konsistent. Vergessen Sie nicht, dass die
Formatkennzeichner »%k« und »%b« von
-printf Dateien mit Löchern unterschiedlich handhaben. Die
Endung »b« bezeichnet stets 512-Byte-Blöcke und
niemals 1024-Byte-Blöcke; dies unterscheidet sich vom Verhalten von
-ls.
- Die Präfixe + und - bezeichnen größer
und kleiner als, wie üblich, d.h. eine exakte Größe
von n Einheiten wird nicht passen. Denken Sie daran, dass die
Größe auf die nächste Einheit aufgerundet wird. Daher
ist -size -1M nicht äquivalent zu
-size -1048576c. Ersteres passt nur auf leere Dateien,
während Letzteres auf Dateien von 0 bis 1.048.575 byte passt.
- -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
- reguläre Datei
- l
- symbolischer Link; dies ist niemals wahr, falls die
Optionen -L oder -follow in Kraft sind, außer wenn
der symbolische Link kaputt ist. Falls Sie nach symbolischen Links suchen
möchten, während -L in Kraft ist, benutzen Sie
-xtype.
- s
- Socket
- D
- Door (Solaris)
- Um nach mehr als einem Typ auf einmal zu suchen,
können Sie eine kombinierte Liste der Typbuchstaben, getrennt durch
ein Komma »,«, angeben (GNU-Erweiterung).
- -uid n
- Die numerische Benutzerkennung der Datei ist kleiner als,
größer als oder genau n.
- -used n
- Auf die Datei ist vor weniger als, mehr als oder genau
n Tagen nach ihrer letzten Statusänderung zugegriffen
worden.
- -user Benutzername
- Die Datei gehört dem Anwender Benutzername
(numerische Benutzerkennung erlaubt).
- -wholename Muster
- Siehe -path. Diese Alternative ist nicht so
portierbar wie -path.
- -writable
- passt auf durch den aktuellen Benutzer schreibbare Dateien.
Die berücksichtigt 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 getäuscht werden, die Abbildung der UID (oder
Root-Squashing) nutzen, da viele Systeme access(2) im Kernel des
Clients implementieren und daher von den Abbildungsinformationen der UID
keinen Gebrauch machen können, die auf dem Server gehalten werden.
- -xtype c
- das Gleiche wie -type, außer wenn die Datei
ein symbolischer Link ist. Für 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 ausgedrückt, für symbolische Links prüft
-xtype den Typ der Datei, den -type nicht prüft.
- -context Muster
- (Nur SELinux) Sicherheitskontexte der Datei, die dem
Muster entspricht.
- -delete
- Dateien oder Verzeichnisse löschen; wahr, falls
erfolgreich entfernt. Falls das Entfernen fehlschlägt, wird eine
Fehlermeldung ausgegeben und der Rückgabewert von find wird
ungleich null sein (wenn es letztendlich beendet wird).
Warnung: Vergessen Sie nicht, dass find die Befehlszeile als
Ausdruck auswertet, so dass find durch ein zuerst gesetztes
-delete veranlasst wird, alles unterhalb der von Ihnen angegebenen
Startpunkte zu löschen.
Wenn Sie die Aktion -delete in der Befehlszeile verwenden, wird
automatisch die Option -depth eingeschaltet. Da -depth
seinerseits die Option -prune wirkungslos macht, können
-depth und -prune nicht sinnvoll kombiniert werden.
Oft möchte ein Benutzer mit -print eine
find-Befehlszeile testen, bevor -delete für die
tatsächliche Entfernung hinzugefügt wird. Um
überraschende Ergebnisse zu vermeiden, ist es üblicherweise
das Beste, -depth explizit während dieser früheren
Testläufe hinzuzufügen.
Die Aktion -delete schlägt beim Entfernen eines Verzeichnisses
fehl, außer wenn das Verzeichnis leer ist.
Zusammen mit der Option -ignore_readdir_race wird find Fehler
der Aktion -delete ignorieren, falls die Datei verschwunden ist,
seit das Elternverzeichnis gelesen wurde: es wird keine Fehlerdiagnosen
ausgeben, der Exit-Code nicht auf einen von Null verschiedenen Wert
gesetzt und der Rückkehr-Code der Aktion -delete wird wahr
sein.
- -exec Befehl ;
- führt den Befehl aus; wahr, wenn Status 0
zurückgegeben wird. Alle folgenden Argumente von find werden
als Argumente des Befehls betrachtet, bis ein Argument gefunden wird, das
»;« beinhaltet. Die Zeichenkette »{}« wird
überall, 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 könnte
nötig sein, beide Konstruktionen zu maskieren (mit einem
»\«) oder in Anführungszeichen zu setzen, um sie vor
einer Expansion durch die Shell zu schützen. Im Abschnitt
BEISPIELE finden Sie Beispiele, wie Sie die Option -exec
benutzen. Der angegebene Befehl wird jeweils für jede gefundene
Datei ausgeführt. Der Befehl wird im Startverzeichnis
ausgeführt. 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 führt den
angegebenen Befehl für die ausgewählten Dateien aus, aber
die Befehlszeile wird durch das Anhängen jeder ausgewählten
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 und sie muss am Ende
direkt vor dem »+« erscheinen; sie muss (mit einem
»\«) maskiert oder in Anführungszeichen gesetzt
werden, um die Interpretation durch die Shell zu verhindern. Der Befehl
wird im Startverzeichnis ausgeführt. Falls irgendein Aufruf mit der
»+«-Form einen von Null verschiedenen Wert als Exit-Status
zurückliefert, dann liefert find einen von Null
verschiedenen Exit-Status zurück. Wenn find einen Fehler
entdeckt, kann dies gelegentlich zu einem unmittelbaren Abbruch
führen, so dass ausstehende Befehle überhaupt nicht mehr
ausgeführt werden. Aus diesem Grund führt
-exec
mein-Befehl … {} + -quit
nicht dazu, dass mein-Befehl tatsächlich ausgeführt
wird. Diese Variante von -exec gibt immer »wahr«
zurück.
- -execdir Befehl ;
- -execdir Befehl {} +
- wie -exec, aber der angegebene Befehl wird in dem
Unterverzeichnis ausgeführt, das die passende Datei enthält,
was normalerweise nicht das Verzeichnis ist, in dem Sie find
aufgerufen haben. So wie bei -exec sollten die geschweiften Klammern {}
auch hier in Anführungszeichen gesetzt werden, wenn find aus einer
Shell heraus aufgerufen wird. Dies ist eine wesentlich sicherere Methode
zum Aufruf von Befehlen, da sie Race Conditions während der
Auflösung 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, müssen Sie sicherstellen, dass Ihre
Umgebungsvariable PATH nicht direkt auf ».« verweist;
andernfalls könnte ein Angreifer Befehle seiner Wahl
ausführen, indem er eine Datei mit geeignetem Namen in einem
Verzeichnis hinterlässt, in dem Sie -execdir
ausführen werden. Das Gleiche gilt für die Einträge
in PATH, die leer oder keine absoluten Verzeichnisnamen sind. Falls
irgendein Aufruf in der »+«-Form einen von Null
verschiedenen Wert als Exit-Status zurückliefert, dann liefert
find einen von Null verschiedenen Exit-Status zurück. Wenn
find einen Fehler entdeckt, kann dies gelegentlich zum
unmittelbaren Abbruch führen, so dass ausstehende Befehle
überhaupt nicht mehr ausgeführt werden. Das Ergebnis der
Aktion hängt davon ab, welche der Varianten + oder the
; benutzt wird.
-execdir Befehl {} + gibt immer
»wahr« zurück, während
-execdir Befehl {} ; nur dann
»wahr« ergibt, wenn der Befehl 0 zurückgibt.
- -fls Datei
- wahr; wie -ls, schreibt aber wie -fprint nach
Datei. Die Ausgabedatei wird immer erstellt, sogar wenn das
Prädikat niemals passte. Lesen Sie den Abschnitt
UNÜBLICHE DATEINAMEN, zu erfahren, wie unübliche
Dateinamen gehandhabt werden.
- -fprint Datei
- wahr; gibt den vollständigen Dateinamen in
Datei aus. Falls Datei nicht existiert, wird sie erzeugt;
andernfalls wird sie gekürzt. 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 Prädikat niemals
passte. Lesen Sie den Abschnitt UNÜBLICHE DATEINAMEN, um zu
erfahren, wie unübliche Dateinamen gehandhabt werden.
- -fprint0 Datei
- wahr; wie -print0, schreibt aber wie -fprint
nach Datei. Die Ausgabedatei wird immer erstellt, sogar, wenn das
Prädikat niemals passte. Lesen Sie den Abschnitt
UNÜBLICHE DATEINAMEN, um zu erfahren, wie unübliche
Dateinamen gehandhabt werden.
- -fprintf Datei Format
- wahr; wie -printf, schreibt aber wie -fprint
nach Datei. Die Ausgabedatei wird immer erstellt, sogar, wenn das
Prädikat niemals passte. Lesen Sie den Abschnitt
UNÜBLICHE DATEINAMEN, um zu erfahren, wie unübliche
Dateinamen gehandhabt werden.
- -ls
- wahr; listet aktuelle Datei im Format ls -dils auf
der Standardausgabe auf. Die Anzahl der Blöcke besteht aus
1 kB-Blöcken, außer wenn die Umgebungsvariable
POSIXLY_CORRECT gesetzt ist, in der Blöcke zu 512 Byte
benutzt werden. Lesen Sie den Abschnitt UNÜBLICHE
DATEINAMEN, um zu erfahren, wie unübliche Dateinamen gehandhabt
werden.
- -ok Befehl ;
- wie -exec, vorher wird der Anwender aber um
Bestätigung gebeten. Falls der Anwender zustimmt, wird der Befehl
ausgeführt. Andernfalls wird nur falsch zurückgegeben. Wenn
der Befehl ausgeführt wird, ist seine Standardeingabe umgeleitet
von /dev/null. Diese Aktion darf nicht zusammen mit der Option
-files0-from angegeben werden.
- Die Antwort auf die Abfrage wird mit einem Paar
regulärer Ausdrücke verglichen, um zu bestimmen, ob es eine
positive oder negative Antwort ist. Dieser reguläre Ausdruck stammt
vom System, falls die Umgebungsvariable POSIXLY_CORRECT gesetzt
ist, ansonsten von den Meldungsübersetzungen von find. Falls
das System keine geeignete Definition hat, wird die Definition von
find selbst benutzt. Auf jeden Fall wird die Interpretation des
regulären Ausdrucks von den Umgebungsvariablen LC_CTYPE
(Zeichenklassen) und LC_COLLATE (Zeichenbereiche und entsprechende
Klassen) beeinträchtigt.
- -okdir Befehl ;
- wie -exec, fragt den Anwender aber zuerst auf die
gleiche Art wie für -ok. Falls der Anwender nicht zustimmt,
wird nur falsch zurückgegeben. Wenn der Befehl ausgeführt
wird, ist seine Standardeingabe umgeleitet von /dev/null. Diese
Aktion darf nicht zusammen mit der Option -files0-from angegeben
werden.
- -print
- wahr; gibt den vollständigen 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 Möglichkeit 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ÜBLICHE DATEINAMEN, um zu erfahren, wie
unübliche Dateinamen gehandhabt werden.
- -print0
- wahr; gibt den vollständigen Dateinamen gefolgt von
einem Null-Zeichen (anstelle des Zeilenvorschubs, den -print
benutzt) aus. Dies ermöglicht, dass Dateinamen, die
Zeilenvorschübe oder andere Typen von Leerräumen 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 »%«-Anweisungen.
Feldbreiten und Genauigkeiten können wie bei der C-Funktion
printf(3) 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
linksbündig ausgerichtet werden). Anders als -print
fügt -printf keinen Zeilenvorschub an das Ende der
Zeichenkette. Die Anweisungen sind:
- \a
- Alarmton
- \b
- Rückschritt
- \c
- Ausgabe gemäß dieser Formatbeschreibung
sofort stoppen und die Ausgabe leeren
- \f
- Seitenvorschub
- \n
- Zeilenumbruch
- \r
- Wagenrücklauf
- \t
- horizontaler Tabulator
- \v
- vertikaler Tabulator
- \0
- ASCII-Nullbyte
- \\
- der Rückwärtsschrägstrich selbst
(»\«)
- \NNN
- das Zeichen, dessen ASCII-Code NNN ist (oktal)
Ein »\«-Zeichen gefolgt von einem anderen Zeichen wird als ein
gewöhnliches Zeichen betrachtet, daher werden beide ausgegeben.
- %%
- das Prozentzeichen selbst
- %a
- die Zeit des letzten Zugriffs auf die Datei,
zurückgegeben im Format der C-Funktion ctime(3).
- %Ak
- die Zeit des letzten Zugriffs auf die Datei, angegeben
durch k. Das ist entweder »@« oder eine Anweisung
für die C-Funktion strftime(3). Einige der möglichen
Werte für k sind nachfolgend aufgeführt; eine
vollständige Liste finden Sie in der Dokumentation zu
strftime(3). Einige davon sind möglicherweise aufgrund von
systembedingten Unterschieden in der Bibliotheksfunktion
strftime(3) nicht auf allen Systemen verfügbar.
- @
- 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.xxxxxxxxxx)
- +
- 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
könnte). Das Sekundenfeld beinhaltet einen Bruchteil.
- X
- Zeitdarstellung der Locale (H:M:S). Das Sekundenfeld
enthält einen Bruchanteil.
- Z
- Zeitzone (z.B. EDT) oder nichts, falls keine Zeitzone
bestimmt werden kann
Datumsfelder:
- a
- abgekürzter Wochentag der Locale (So bis Sa)
- A
- voller Wochentag der Locale, variable Länge (Sonntag
bis Samstag)
- b
- abgekürzter Monatsname der Locale (Jan bis Dez)
- B
- voller Monatsname der Locale in variabler Länge
(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
Kompatibilität mit diesem Format. Es gibt dort keine
Nachkommastellen im Sekundenfeld.
- d
- Tag des Monats (01 bis 31)
- D
- Datum (mm/dd/yy)
- F
- Datum (yyyy-mm-dd)
- 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 für diese Datei benutzte Plattenplatz in
512-Byte-Blöcken. Da Plattenplatz als Vielfaches der
Blockgröße des Dateisystems reserviert wird, ist dieser
üblicherweise größer als %s/512, er kann aber auch
kleiner sein, wenn die Datei eine Datei mit Löchern (Sparse-Datei)
ist.
- %Bk
- Der Erstellungszeitpunkt der Datei in dem von k
angegebenen Format, welches das Gleiche wie für %A ist. Diese
Anweisung liefert eine leere Zeichenkette, falls das darunterliegende
Betriebssystem oder Dateisystem keine Erstellungszeitpunkte
unterstützt.
- %c
- das Datum, an dem zum letzten Mal der Status der Datei
geändert wurde, im Format der C-Funktion ctime(3).
- %Ck
- das Datum, an dem zum letzten Mal der Status der Datei
geändert wurde, in dem durch k angegebenen Format, was das
Gleiche ist, wie für %A.
- %d
- die Tiefe der Datei im Verzeichnisbaum; Null bedeutet, dass
die Datei ein Befehlszeilenargument ist.
- %D
- die Gerätenummer des Geräts auf der die Datei
existiert (das Feld »st_dev« der Stuktur
»stat«) als Dezimalzahl
- %f
- Gibt den Basisnamen aus. Dies ist der Dateiname ohne
vorangestellte Verzeichnisnamen (also nur das letzte Element). Für
/ ergibt sich /. Ein Beispiel finden Sie im Abschnitt
BEISPIELE.
- %F
- Typ des Dateisystems, auf dem die Datei liegt; dieser Wert
kann für -fstype benutzt werden.
- %g
- der Name der Gruppe der Datei oder die numerische
Gruppenkennung, wenn die Gruppe keinen Namen hat
- %G
- die numerische Gruppenkennung der Datei
- %h
- Der Verzeichnisname; die voranstehenden Verzeichnisse des
Dateinamens (alles außer dem letzten Element). Falls der Dateiname
keine Schrägstriche enthält (da er im aktuellen Verzeichnis
ist), wird der Kennzeichner %h zu ».« expandiert. Für
Dateien, die selbst Verzeichnisse sind und einen Schrägstrich
enthalten ( /), wird %h zu einer leeren Zeichenkette expandiert.
Ein Beispiel finden Sie im Abschnitt BEISPIELE.
- %H
- der Startpunkt, unter dem die Datei gefunden wurde
- %i
- die Inode-Nummer der Datei (dezimal)
- %k
- der für diese Datei benutzte Plattenplatz in
1 kB-Blöcken. Da Plattenplatz als Vielfaches der
Blockgröße des Dateisystems reserviert wird, ist dieser
üblicherweise größer als %s/1024, er kann aber auch
kleiner sein, wenn die Datei eine Datei mit Löchern (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
unübliche Sortierung der oktalen Zugriffsrechte benutzt, werden Sie
einen Unterschied zwischen dem tatsächlichen Wert des Datei-Modus
und der Ausgabe von %m sehen. Normalerweise möchten Sie eine
führende 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
für ls). Diese Anweisung wird von Findutils seit
einschließlich Version 4.2.5 unterstützt.
- %n
- Anzahl harter Links auf die Datei
- %p
- Name der Datei
- %P
- Name der Datei; ohne den Namen des Startpunkts, unter dem
sie gefunden wurde.
- %s
- die Größe der Datei in Byte
- %S
- Dichte der Datei. Diese wird berechnet als
(BLOCKGRÖßE*st_blocks / st_size). Der genaue Wert, den Sie
für eine normale Datei einer bestimmten Länge erhalten ist
vom System abhängig. Normale Dateien mit Löchern
(Sparse-Dateien) werden einen Wert kleiner als 1.0 aufweisen und Dateien,
die indirekte Blöcke verwenden können, einen Wert
größer als 1.0 haben. Im allgemeinen ist die von einer Datei
verwandte Anzahl an Blöcken dateisystemabhängig. Der Wert,
der für BLOCKGRÖßE verwendet wird, ist vom System
abhängig, beträgt aber normalerweise 512 Byte. Falls die
Dateigröße null ist, ist der ausgegebene Wert undefiniert.
Auf Systemen, auf denen die Unterstützung für st_blocks
fehlt, wird als Dichte einer Datei 1.0. angenommen.
- %t
- Zeit der letzten Änderung der Datei in dem von der
C-Funktion ctime(3) zurückgegebenen Format
- %Tk
- Zeit der letzten Änderung der Datei in dem durch
k angegebenen Format, wie bei %A
- %u
- Name des Benutzers der Datei oder numerische
Benutzerkennung, falls der Benutzer keinen Namen hat.
- %U
- numerische Benutzerkennung 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,
»?« für jeden anderen Fehler beim Bestimmen des Typs
des Symlink-Ziels.
- %Z
- (nur SELinux) Sicherheitskontext der Datei.
- %{ %[ %(
- Für zukünftige Verwendung reserviert.
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 könnten). Ein
»%« am Ende des Formatarguments verursacht unvorhersehbares
Verhalten, da es dort kein nachfolgendes Zeichen gibt. In einigen Locales
könnte es Ihre Haustürschlüssel verstecken,
während es in anderen Ihre letzte Seite des Romans, den Sie lesen,
entfernt.
Die Anweisungen %m und %d unterstützen die Schalter
#,
0
und
+, die anderen Anweisungen jedoch nicht, selbst wenn Nummern
ausgegeben werden. Numerische Anweisungen, die diese Schalter nicht
unterstützen, beinhalten
G,
U,
b,
D,
k und
n. Der Formatschalter »-« wird
unterstützt und ändert die Ausrichtung eines Feldes von
rechtsbündig (was vorgegeben ist) auf linksbündig.
Lesen Sie den Abschnitt
UNÜBLICHE DATEINAMEN, um zu erfahren, wie
unübliche Dateinamen gehandhabt werden.
- -prune
- Wahr; falls die Datei ein Verzeichnis ist, wird nicht
hinein abgestiegen. Falls -depth angegeben ist, dann hat
-prune keine Wirkung. Da -delete -depth impliziert,
können Sie -prune und -delete nicht sinnvoll zusammen
benutzen. Um beispielsweise das Verzeichnis src/emacs und alle
Dateien und Verzeichnisse darunter zu überspringen und die Namen
der anderen gefundenen Dateien auszugeben, machen Sie etwas wie Folgendes:
find . -path ./src/emacs -prune -o -print
- -quit
- Beendet sofort (mit einem Rückgabewert von 0, falls
keine Fehler aufgetreten sind). Dies unterscheidet sich von -prune,
da -prune lediglich auf die Inhalte der ignorierten Verzeichnisse
angewendet wird, während -quit einfach nur find
sofort beendet. Es bleiben keine laufenden Kindprozesse übrig. Alle
mit -exec … + or
-execdir … + erstellten Befehle, die
aufgerufen wurden, werden beendet. Nach der Ausführung von
-quit werden keine weiteren in der Befehlszeile angegebenen Befehle
verarbeitet. Beispielsweise gibt »
find /tmp/foo
/tmp/bar -print -quit«
nur »/tmp/foo« aus.
Ein häufiger Anwendungsfall für -quit ist, das
Durchsuchen des Dateisystems zu beenden, sobald das Gewünschte
gefunden wurde. Falls beispielsweise nur eine einzelne Datei gefunden
werden soll, können Sie Folgendes tun:
find / -name Nadel -print -quit
aufgelistet in der Reihenfolge abnehmender Wertigkeit:
- ( expr )
- Wertigkeit erzwingen. Da Klammern für die Shell
etwas spezielles sind, werden Sie sie normalerweise maskieren
müssen. Viele Beispiele in dieser Handbuchseite verwenden zu diesem
Zweck; »\( … \) anstelle von »( … )«.
- ! Ausdruck
- wahr, wenn der Ausdruck falsch ist. Es wird
normalerweise auch nötig sein, dieses Zeichen vor einer
Interpretation durch die Shell zu schützen.
- -not Ausdruck
- das Gleiche wie ! Ausdruck, ist aber nicht
POSIX-konform
- Ausdruck1 Ausdruck2
- Zwei Ausdrücke in einer Reihe werden mit einem
impliziten -a 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 nützlich 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.
Bitte beachten Sie, das
-a, wenn es implizit (zum Beispiel, wenn zwei
Tests ohne einen expliziten Operator zwischen ihnen auftauchen) oder explizit
angegeben wird, Vorrang vor
-o hat. Das bedeutet, dass
find . -name
afile -o -name bfile -print niemals
afile ausgibt.
Viele der Aktionen von
find resultieren in der Ausgabe von Daten, die
unter der Kontrolle anderer Benutzer stehen. Dies umfasst Dateinamen,
Größen, Änderungszeiten und so weiter. Dateinamen stellen
ein potentielles Problem dar, da sie jedes Zeichen mit Ausnahme von
»\0« und »/« enthalten können.
Unübliche Zeichen in Dateinamen können unerwartete und oft
unerwünschte Dinge mit Ihrem Terminal tun (beispielsweise die
Einstellungen Ihrer Funktionstasten auf einigen Terminals ändern).
Unübliche Zeichen werden von verschiedenen Aktionen unterschiedlich
gehandhabt, wie im Folgenden beschrieben.
- -print0, -fprint0
- immer den genauen Dateinamen unverändert ausgeben,
sogar wenn die Ausgabe an ein Terminal geht.
- -ls, -fls
- Unübliche Zeichen werden maskiert. Leerzeichen,
Rückwärtsschrägstrich und doppelte
Anführungszeichen werden unter Benutzung von Maskierung im C-Stil
ausgegeben (zum Beispiel »\f«, »\«). Andere
unübliche Zeichen werden unter Benutzung von einer oktalen
Maskierung ausgegeben. Andere druckbare Zeichen (für -ls und
-fls sind das die Zeichen zwischen oktal 041 und 0176) werden
unverändert ausgegeben.
- -printf, -fprintf
- Falls die Ausgabe nicht an ein Terminal geht, wird sie
unverändert gedruckt. Andernfalls hängt das Ergebnis davon
ab, welche Anweisung benutzt wird. Die Anweisungen %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 Anweisungen %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 können, um beliebige Daten an das
Terminal zu senden und daher unverändert gedruckt werden. Die
Anweisungen %f, %h, %l, %p und %P werden maskiert. Diese Maskierung wird
auf die gleiche Art durchgeführt wie für GNU- ls.
Dies ist nicht der gleiche Maskierungsmechanismus wie der, der für
-ls und -fls benutzt wird. Falls Sie die Wahl haben, welches
Format für die Ausgabe benutzt werden soll, ist es normalerweise
besser »\0« als Endezeichen statt eines Zeilenvorschubs zu
verwenden, da Dateinamen Leerzeichen und Zeilenvorschübe enthalten
können. Die Einstellung der Umgebungsvariablen LC_CTYPE wird
benutzt, um zu bestimmen, welche Zeichen maskiert werden müssen.
- -print, -fprint
- Maskierung wird auf die gleiche Weise wie für
-printf und -fprintf gehandhabt. Falls Sie find in
einem Skript benutzen oder in einer Situation sind, in der die gefundenen
Dateien beliebige Namen haben können, sollten Sie in Betracht
ziehen -print0 anstelle von -print benutzen.
Die Aktionen
-ok und
-okdir geben den aktuellen Dateinamen
unverändert aus. Dies könnte sich in einem späteren
Release ändern.
Für größtmögliche Konformität zum
POSIX-Standard, sollten Sie die Umgebungsvariable
POSIXLY_CORRECT
setzen. Die folgenden Optionen sind im POSIX-Standard (IEEE Std 1003.1-2008,
2016 Edition) spezifiziert:
- -H
- Diese Option wird unterstützt.
- -L
- Diese Option wird unterstützt.
- -name
- Diese Option wird unterstützt, aber die
POSIX-Konformität hängt von der POSIX-Konformität der
Bibliotheksfunktion fnmatch(3) des SYstems ab. Ab findutils-4.2.2
werden Shell-Metazeichen (zum Beispiel »*«,
»?« oder »[]«) zu einem führenden
».« passen, da dies die IEEE-PASC-Interpretation 126
erfordert. Dies ist eine Änderung gegenüber vorherigen
Versionen der Findutils.
- -type
- unterstützt. POSIX spezifiziert »b«,
»c«, »d«, »l«,
»p«, »f« und »s«. GNU-Find
unterstützt außerdem »D«, das eine Door
(Spezialdatei für Prozesskommunikation) repräsentiert, wo
diese vom Betriebsystem bereitgestellt wird. Desweiteren erlaubt GNU find
die Angabe mehrfacher Typen auf einmal in einer Kommata-getrennten Liste.
- -ok
- unterstützt. Die Interpretation der Antwort
entspricht den »ja«- und »nein«-Mustern, die
durch Setzen der Umgebungsvariablen LC_MESSAGES ausgewählt
wurde. Wenn die Umgebungsvariable POSIXLY_CORRECT gesetzt ist,
werden diese Muster als die Systemdefinition einer positiven (ja) oder
negativen (nein) Anwort betrachtet. Lesen Sie die Dokumentation des
Systems für nl_langinfo(3), insbesondere YESEXPR und NOEXPR.
Wenn POSIXLY_CORRECT nicht gesetzt ist, werden die Muster von
finds eigenem Meldungskatalog genommen.
- -newer
- unterstützt. Falls die angegebene Datei ein
symbolischer Link ist, wird er immer zurückverfolgt. Dies ist eine
Änderung gegenüber dem bisherigen Verhalten, das benutzt
wurde, um die maßgebliche Zeit vom symbolischen Link zu nehmen;
siehe den Abschnitt GESCHICHTE unterhalb.
- -perm
- unterstützt. Falls die Umgebungsvariable
POSIXLY_CORRECT nicht gesetzt ist, werden einige Modusargumente
(zum Beispiel +a+x) unterstützt, die in POSIX nicht gültig
sind, um abwärtskompatibel zu sein.
- Andere Primärausdrücke
- Die Primärausdrücke -atime,
-ctime, -depth, -exec, -group, -links,
-mtime, -nogroup, -nouser, -ok, -path,
-print, -prune, -size, -user und -xdev
werden alle unterstützt.
Der POSIX-Standard spezifiziert Klammern »(«, »)«,
Verneinung »!« und die Operatoren »AND« und
»OR« (
-a und
-o).
Alle anderen Operationen, Prädikate, Ausdrücke und so weiter sind
Erweiterungen jenseits des POSIX-Standards. Viele dieser Erweiterungen sind
jedoch nicht auf GNU-Find beschränkt.
Der POSIX-Standard erfordert, dass
find Schleifen entdeckt:
- Das Hilfswerkzeug find muss unendliche Schleifen
entdecken, also das Eintreten in ein bereits vorher besuchtes Verzeichns,
das ein Vorgänger 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 erfüllt diese Anforderungen. Die Link-Anzahl von
Verzeichnissen, die Einträge mit harten Links auf einen
Vorgänger enthalten, werden oft kleiner sein, als sie andernfalls sein
sollten. Dies kann bedeuten, dass GNU-Find manchmal den Besuch eines
Unterverzeichnisses wegoptimiert, das tatsächlich ein Link zu einem
Vorgänger ist. Da
find nicht tatsächlich in ein solches
Unterverzeichnis eintritt, ist es erlaubt, das Ausgeben einer
Diagnosenachricht zu verhindern. Dieses Verhalten könnte jedoch ein
wenig verwirrend sein. Es ist unwahrscheinlich, dass sich tatsächlich
jemand auf dieses Verhalten verlässt. Falls die Leaf-Optimierung mit
-noleaf ausgeschaltet wurde, wird der Verzeichniseintrag immer
untersucht und die Diagnosenachricht wird an geeigneter Stelle ausgegeben.
Symbolische Links können 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 weiß, dass es
stat() oder
chdir() bei einem
symbolischen Link nicht aufrufen muss, daher ist diese Diagnose häufig
nicht nötig.
Die Option
-d wird unterstützt, um die Kompatibilität 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.
- LANG
- Stellt einen Vorgabewert für die
Internationalisierungsvariablen bereit, die nicht gesetzt oder null sind.
- LC_ALL
- Falls dies auf einen nicht leeren Zeichenkettenwert gesetzt
ist, überschreibt 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 Bibliotheksfunktion fnmatch(3) und
unterstützt daher LC_COLLATE in Abhängigkeitt von der
Systembibliothek. Diese Variable beeinflusst außerdem die
Interpretation der Antwort auf -ok, während die Variable
LC_MESSAGES das Muster auswählt, das tatsächlich
benutzt wird, um die Antwort auf -ok zu interpretieren, wird die
Interpretation jeglicher Ausdrücke mit Klammern im Muster durch
LC_COLLATE beeinflusst.
- LC_CTYPE
- Diese Variable beeinflusst die Behandlung von
Zeichenklassen, die in regulären Ausdrücken ebenso wie im
Test -name benutzt wird, falls die Bibliotheksfunktion
fnmatch(3) des Systems dies unterstützt. Diese Variable
beeinflusst außerdem die Interpretation jeglicher Zeichenklassen,
die in regulären Ausdrücken benutzt werden, um die Antwort
auf die durch -ok angegebene Abfrage zu interpretieren. Die
Umgebungsvariable LC_CTYPE wird außerdem beeinflussen,
welche Zeichen als nicht abdruckbar betrachtet werden, wenn Dateinamen
ausgegeben werden; siehe den Abschnitt UNÜBLICHE DATENAMEN.
- LC_MESSAGES
- bestimmt die Locale, die für internationalisierte
Meldungen verwendet werden soll. Falls die Umgebungsvariable
POSIXLY_CORRECT gesetzt ist, bestimmt dies außerdem die
Interpretation der Antwort auf die durch die Aktion -ok angegebene
Abfrage.
- NLSPATH
- bestimmt den Speicherort der
Internationalisierungs-Meldungskataloge.
- PATH
- beeinflusst die Verzeichnisse, die durchsucht werden, um
die ausführbaren Dateien zu finden, die durch -exec,
-execdir, -ok und -okdir aufgerufen werden.
- POSIXLY_CORRECT
- bestimmt die von -ls und -fls benutzte
Blockgröße, Falls POSIXLY_CORRECT gesetzt ist, sind
Blöcke Einheiten von 512 Byte. Andernfalls sind es Einheiten von
1024 Byte.
- Das Setzen dieser Variable schaltet außerdem
standardmäßig Warnmeldungen aus (sprich, es impliziert
-nowarn), da POSIX erfordert, dass unabhängig von der
Ausgabe von -ok alle Meldungen auf der Standardfehlerausgabe
Diagnosen sind und in einem Rückgabewert ungleich null resultieren
müssen.
- Wenn POSIXLY_CORRECT nicht gesetzt ist, wird
-perm +zzz nur wie -perm /zzz betrachtet,
falls +zzz kein gültiger symbolischer Modus ist. Wenn
POSIXLY_CORRECT gesetzt ist, werden solche Konstruktionen als
Fehler betrachtet.
- Wenn POSIXLY_CORRECT gesetzt ist, hängt die
Interpretation der Antwort auf die, durch die Aktion -ok angegebene
Abfrage, von den Meldungskatalogen des Systems ab, im Gegensatz zur
Beachtung der eigenen Meldungsübersetzungen von find.
- TZ
- beeinflusst die Zeitzone, die für einige
zeitbezogene Formatanweisungen von -printf und -fprintf
benutzt wird.
- •
- Dateien mit dem Namen core in oder unterhalb des
Verzeichnisses /tmp suchen und diese löschen.
$ find /tmp -name core -type f -print | xargs /bin/rm -f
Beachten Sie, dass dies nicht korrekt funktioniert, falls die Dateinamen
Zeilenvorschübe, einfache oder doppelte Anführungszeichen
oder Leerzeichen enthalten.
- •
- sucht Dateien mit dem Namen core in oder unterhalb
des Verzeichnisses /tmp und löscht diese. Verarbeitet
Dateinamen auf eine Weise, in der Datei- oder Verzeichnisnamen, die
Dateinamen einfache oder doppelte Anführungszeichen, Leerzeichen
oder Zeilenvorschübe enthalten, korrekt gehandhabt werden.
$ find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f
Der Test -name kommt in der Reihenfolge vor dem Test -type, um
zu verhindern, dass stat(2) für jede Datei aufgerufen
wird.
Beachten Sie, dass es immer noch einen Wettlauf zwischen der Zeit, die
find zum Durchsuchen des Dateisystems und der Ausgabe der passenden
Dateinamen einerseits und der Zeit, die der von
xargs aufgerufene
Prozess für die Arbeit mit der Datei braucht, gibt.
- •
- Nehmen wir an, dass ein fiktives Programm namens
proggy eine sehr lange, durch Nullbytes getrennte Dateiliste
vorfiltert und erzeugt, diese als Startpunkte verarbeitet und alle
regulären leeren Dateien darin sucht:
$ proggy | find -files0-from - -maxdepth 0 -type f -empty
Durch `-files0-from -` werden die Namen der Startpunkte aus
der Standardeingabe gelesen, das heißt, aus der Pipe.
Hierbei stellt -maxdepth 0 sicher, dass Einträge
ausdrücklich ohne Absteigen in Unterverzeichnisse ausgewertet
werden (falls einer der Startpunkte ein Verzeichnis ist).
- •
- Den Befehl file für jede Datei in oder
unterhalb des aktuellen Verzeichnisses ausführen.
$ find . -type f -exec file '{}' \;
Beachten Sie, dass Klammern in einfache Anführungszeichen
eingeschlossen werden, um sie vor einer Interpretation als
Shell-Skript-Zeichensetzung zu schützen. Der Strichpunkt wird
gleichermaßen durch die Benutzung des
Rückwärtsschrägstrichs geschützt, da einfache
Anführungszeichen in diesem Fall ebenfalls benutzt werden
könnten.
In vielen Fällen könnten Sie die Syntax
»-exec … +« oder besser noch
»-execdir … +« aus Leistungs- und
Sicherheitsgründen bevorzugen.
- •
- das Dateisystem nur einmal durchlaufen, set-user-ID-Dateien
und Verzeichnisse in /root/suid.txt und große Dateien in
/root/big.txt auflisten.
$ find / \
\( -perm -4000 -fprintf /root/suid.txt '%#m %u %p\n' \) , \
\( -size +100M -fprintf /root/big.txt '%-10s %p\n' \)
Dieses Beispiel verwendet das Zeilenfortführungszeichen
»\« auf den ersten zwei Zeilen, um die Shell anzuweisen, mit
dem Einlesen des Befehls auf der nächsten Zeile fortzufahren.
- •
- Nach Dateien in Ihrem Home-Verzeichnis suchen, die in den
letzten 24 Stunden geändert wurden.
$ find $HOME -mtime 0
Dieser Befehl funktioniert auf diese Art, weil die Zeit, seit jede Datei
zuletzt verändert wurde, durch 24 Stunden geteilt und der Rest
verworfen wird. Dies bedeutet, dass eine Datei, um -mtime 0
zu entsprechen, eine Veränderung in der Vergangenheit haben muss,
die weniger als 24 Stunden zurückliegt.
- •
- sucht Dateien, die ausführbar, aber nicht lesbar
sind
$ find /sbin /usr/sbin -executable \! -readable -print
- •
- Nach Dateien suchen, die Lese- und Schreibrechte für
ihren Benutzer und ihre Gruppe haben, aber von anderen Benutzern gelesen,
aber nicht geschrieben werden können.
$ find . -perm 664
Dateien, die diesem Kriterium entsprechen, aber andere Rechte-Bits gesetzt
haben (zum Beispiel, wenn jemand die Datei ausführen kann), werden
nicht passen.
- •
- Nach Dateien suchen, die Lese- und Schreibrechte für
ihren Benutzer und ihre Gruppe haben und die von anderen Benutzern gelesen
werden können, ohne das Vorhandensein irgendwelcher
zusätzlicher Rechte-Bits (zum Beispiel des Bits für
Ausführbarkeit) zu betrachten.
$ find . -perm -664
Dies wird beispielsweise auf eine Datei mit dem Modus 0777
passen.
- •
- sucht nach Dateien, die für irgendjemanden
schreibbar sind (ihren Besitzer, ihre Gruppe oder irgendjemand anderes).
$ find . -perm /222
- •
- Nach Dateien suchen, die für ihren Besitzer oder
ihre Gruppe schreibbar sind.
$ 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. Die Dateien müssen nicht sowohl für Besitzer und
Gruppe schreibbar sein, um zu passen; eines genügt.
- •
- Nach Dateien suchen, die für ihren Besitzer oder
ihre Gruppe schreibbar sind.
$ find . -perm -220
$ find . -perm -g+w,u+w
Beide Befehle führen das Gleiche aus.
- •
- Eine ausgeklügeltere Suche nach Berechtigungen.
$ find . -perm -444 -perm /222 \! -perm /111
$ find . -perm -a+r -perm /a+w \! -perm /a+x
Diese beiden Befehle suchen nach Dateien, die für jedermann lesbar
sind ( -perm -444 oder -perm -a+r), mindestens ein gesetztes
Schreib-Bit haben ( -perm /222 oder -perm /a+w), aber
für niemanden ausführbar sind ( ! -perm /111
beziehungsweise ! -perm /a+x).
- •
- Dieser Befehl kopiert den Inhalt aus dem
/Quellverzeichnis in das /Zielverzeichnis, lässt aber
Dateien und Verzeichnisse mit Namen .snapshot aus (und alles, was
sich darin befindet). Er lässt außerdem alle Dateien und
Verzeichnisse aus, deren Name auf ~ endet, nicht jedoch ihren
Inhalt.
$ cd /Quellverzeichnis
$ find . -name .snapshot -prune -o \( \! -name '*~' -print0 \) \
| cpio -pmd0 /dest-dir
Die Konstruktion
-prune -o \( … -print0 \)
ist ziemlich gebräuchlich. Die Idee besteht hier darin, dass der
Ausdruck vor -prune auf die Dinge passt, die gekürzt werden.
Die Aktion -prune selbst gibt jedoch wahr zurück, daher
stellt das folgende -o sicher, dass die rechte Seite nur für
die Verzeichnisse ausgewertet wird, die nicht gekürzt wurden (der
Inhalt der gekürzten Verzeichnisse wird nicht einmal besucht und
ist daher irrelevant). Der Ausdruck auf der rechten Seite von -o
ist nur der Übersichtlichkeit 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.
- •
- Beim folgenden gegebenen Verzeichnis mit Projekten und den
damit verbundenen Versionsverwaltungsverzeichnissen wird eine effiziente
Suche nach den Wurzeln der Projekte durchgeführt:
$ find repo/ \
\( -exec test -d '{}/.svn' \; \
-or -exec test -d '{}/.git' \; \
-or -exec test -d '{}/CVS' \; \
\) -print -prune
Beispielausgabe:
repo/project1/CVS
repo/gnu/project2/.svn
repo/gnu/project3/.svn
repo/gnu/project3/src/.svn
repo/project4/.git
In diesem Beispiel verhindert -prune unnötiges 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.
- •
- Nach verschiedenen Dateitypen suchen
$ find /tmp -type f,d,l
sucht nach Dateien, Verzeichnissen und symbolischen Links im Verzeichnis
/tmp. Dabei werden die Typen als Komma-separierte Liste
übergeben (GNU-Erweiterung), was ansonsten äquivalent zu dem
folgenden längeren, portableren Ausdruck ist:
$ find /tmp \( -type f -o -type d -o -type l \)
- •
- Nach Dateien mit dem Namen Nadel suchen und sofort
anhalten, wenn der erste Treffer gefunden wird:
$ find / -name Nadel -print -quit
- •
- Darstellung, wie die Formatanweisungen %f und
%h für die -printf-Aktion in einigen
Grenzfällen interpretiert wird. Hier ist ein Beispiel, das auch
einige Ausgaben enthält.
$ find . .. / /tmp /tmp/TRACE compile compile/64/tests/find -maxdepth 0 -printf '[%h][%f]\n'
[.][.]
[.][..]
[][/]
[][tmp]
[/tmp][TRACE]
[.][compile]
[compile/64/tests][find]
find endet mit Status Null, falls alle Dateien erfolgreich verarbeitet
wurden und größer als Null, falls ein Fehler aufgetreten ist.
Dies ist absichtlich eine sehr weitgehende Beschreibung, aber falls der
Rückgabewert ungleich Null ist, sollten Sie sich nicht auf die
Richtigkeit des Ergebnisses von
find verlassen.
Wenn ein Fehler auftritt, stoppt
find unmittelbar, ohne alle angegebenen
Aktionen abzuschließen. Zum Beispiel werden einige der Startpunkte
nicht untersucht oder einige ausstehenden Programmaufrufe für
-exec … {} + oder
-execdir … {} + werden nicht
ausgeführt.
Ab findutils-4.2.2 stimmen Shell-Metazeichen (»*«,
»?« oder »[]« zum Beispiel), die in Mustern
für Dateinamen verwendet werden, mit einem führenden
».« überein, da die Interpretation 126 von IEEE POSIX
dies erfordert.
Ab findutils-4.3.3 passt
-perm /000 nun auf alle Dateien statt auf
keine.
Zeitstempel in Nanosekundenauflösung wurden in findutils-4.3.3
implementiert.
Ab findutils-4.3.11 setzt die Aktion
-delete den Rückgabewert von
find auf einen Wert ungleich null, wenn sie fehlschlägt.
find wird jedoch nicht sofort beendet. Vorher wurde der
Rückgabewert von
find nicht durch ein Scheitern von
-delete beeinflusst.
Funktion |
Hinzugefügt in |
Erscheint auch in |
-files0-from |
4.9.0 |
|
-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 |
|
Die Syntax
-perm +MODE wurde in findutils-4.5.12 zugunsten von
-perm /MODUS entfernt. Die Syntax
+MODE wurde als
veraltet markiert, da findutils-4.2.21 bereits im Jahre 2005
veröffentlicht wurde.
Der Befehl
find . -name afile -o -name bfile -print gibt niemals
afile aus, da der Befehl tatsächlich äquivalent zu
find . -name afile -o \( -name bfile -a -print \) ist. Denken Sie
daran, dass
-a Vorrang vor
-o hat und dass, sofern kein Operator
zwischen den Tests angegeben ist,
-a angenommen wird.
$ find . -name *.c -print
find: Der Pfad muss vor dem Ausdruck stehen
find: Mögliches nichtgeschütztes Muster nach dem Prädikaten »-name«?
Dies passiert, wenn die Shell das Muster
*.c auf mehr als einen im
aktuellen Verzeichnis existierenden Dateinamen expandieren könnte und
die entstehenden Dateinamen in der Befehlszeile wie folgt an
find
weitergibt:
find . -name frcode.c locate.c word_io.c -print
Dieser Befehl wird natürlich nicht funktionieren, da das Prädikat
-name nur genau ein Muster als Argument erlaubt. Statt auf diese Art zu
arbeiten, sollten Sie das Muster in Anführungszeichen
einschließen oder den Platzhalter schützen, und damit
find erlauben, das Muster mit dem Platzhalter während der Suche
auf passende Dateinamen zu verwenden, statt die Dateinamen durch die
Eltern-Shell zu expandieren:
$ find . -name '*.c' -print
$ find . -name \*.c -print
Es gibt Sicherheitsprobleme, die dem durch den POSIX-Standard für
find definierten Verhalten innewohnen und die daher nicht behoben
werden können. Die Aktion
-exec ist zum Beispiel von Natur aus
unsicher und es sollte stattdessen
-execdir verwendet werden.
Die Umgebungsvariable
LC_COLLATE hat keinen Einfluss auf die Aktion
-ok.
Onlinehilfe für GNU findutils:
<
https://www.gnu.org/software/findutils/#get-help>
Melden Sie Fehler in der Übersetzung an
das
deutschsprachige Team beim GNU Translation Project
Melden Sie alle anderen Fehler über das Formular im
Fehlererfassungssystem bei GNU Savannah:
Allgemeine Themen zum GNU-Findutils-Paket werden in der Mailingliste
bug-findutils diskutiert:
Copyright © 1990-2022 Free Software Foundation, Inc. Lizenz GPLv3+:
GNU GPL
Version 3 oder neuer.
Dies ist freie Software: Sie können sie verändern und weitergeben.
Es gibt KEINE GARANTIE, soweit gesetzlich zulässig.
chmod(1),
locate(1),
ls(1),
updatedb(1),
xargs(1),
lstat(2),
stat(2),
ctime(3)
fnmatch(3),
printf(3),
strftime(3),
locatedb(5),
regex(7)
Die vollständige Dokumentation ist auf
<
https://www.gnu.org/software/findutils/find>
oder lokal via:
info find
Die deutsche Übersetzung dieser Handbuchseite wurde von Chris Leick
<
[email protected]>, Mario Blättermann
<
[email protected]>, Dr. Tobias Quathamer
<
[email protected]> und Helge Kreutzmann <
[email protected]>
erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die
GNU
General Public License Version 3 oder neuer bezüglich der
Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken
Sie bitte eine E-Mail an die
Mailingliste
der Übersetzer