find - in einer Verzeichnishierarchie nach Dateien suchen
ÜBERSICHT
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 kann ein doppeltes Minuszeichen -- benutzt werden, um
zu signalisieren, dass die verbleibenden Argumente keine Optionen sind
(obwohl es im Allgemeinen sicherer ist, wenn Sie dafür 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 ü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.
Wenn der gesamte Ausdruck keine andere Aktion als -prune
oder -print enthält, wird für alle Dateien, für
welche der Ausdruck »wahr« ergibt, die Aktion -print
durchgeführt.
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.
- -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.
Numerische Argumente können angegeben werden als
- +n
- für größer als n,
- -n
- für kleiner als n,
- n
- für 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
verändert 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-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 n Minuten geändert.
- -cnewer
Datei
- Der Status der Datei wurde verändert, seit Datei zum letzten
Mal geändert wurde. Falls Datei ein symbolischer Link ist
und die Optionen -H oder -L in Kraft sind, wird immer die
Änderungszeitzeit des Status der Datei benutzt, auf den er zeigt.
- -ctime n
- Der Dateistatus wurde zuletzt vor 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
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
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 Gruppenkennzahl der Datei ist n.
- -group gname
- Datei gehört der Gruppe Gruppenname (numerische
Gruppenkennzahlen 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
- Datei hat die Inode-Nummer 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 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 n Minuten verändert.
- -mtime n
- Daten der Datei wurden zuletzt vor 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; ein Beispiel
finden Sie in der Beschreibung von -path. 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 Datei
- Datei ist später verändert worden als Datei. Falls
Datei ein symbolischer Link ist und die Optionen -H oder
-L in Kraft sind, wird immer die Veränderungszeit 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 Gruppenkennzahl der Datei entspricht keiner Gruppe.
- -nouser
- Die numerische Benutzerkennzahl 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"
einen Eintrag für 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 überprüfen. Um beispielsweise das
Verzeichnis »src/emacs« und alle Dateien und Verzeichnisse
darin zu überspringen 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
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 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 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 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 Benutzerkennzahl der Datei ist n.
- -used n
- Auf die Datei ist n Tage nach ihrer letzten Statusänderung
zugegriffen worden.
- -user
Benutzername
- Die Datei gehört dem Anwender Benutzername (numerische
Benutzerkennzahl 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 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 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 löschen; wahr, falls erfolgreich entfernt. Falls das
Entfernen fehlschlägt, wird eine Fehlermeldung ausgegeben. Falls
-delete fehlschlägt, wird der Rückgabewert 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 führen, dass find
versucht alles was Sie unterhalb des Startpunkts angegeben haben zu
löschen. Wenn Sie eine find-Befehlszeile testen, die Sie
später beabsichtigen mit -delete zu nutzen, sollten Sie
explizit -depth angeben, um spätere Überraschungen
zu vermeiden. Da -delete -depth impliziert, können
Sie sinnvollerweise nicht -prune und -delete zusammen
benutzen.
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 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 diese Zeichenkette sollte (wenn
find aus einer Shell heraus aufgerufen wird) in
Anführungszeichen gesetzt werden (beispielsweise '{}'), 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. 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.
- 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
Nachrichtenü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.
- -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« 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-Code 0
- \\
- 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«
- %Ak
- die Zeit des letzten Zugriffs auf die Datei, angegeben durch k. Das
ist entweder »@« oder eine Anweisung für die
C-Funktion »strftime«. Die möglichen Werte für
k sind nachfolgend aufgeführt; einige davon sind
möglicherweise aufgrund von Unterschieden zwischen den Systemen
nicht auf allen Systemen in »strftime«
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)
- 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.
- %c
- das Datum, an dem zum letzten Mal der Status der Datei geändert
wurde, im Format der C-Funktion »ctime«
- %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
- 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 für
-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 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.
- %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
C-»ctime« 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 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,
»?« 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, nicht darin hinabsteigen. Falls
-depth angegeben ist, falsch; kein Effekt. Da -delete
-depth impliziert, können Sie sinnvollerweise -prune
and -delete nicht zusammen benutzen.
- -quit
- sofort beenden. Es werden keine laufenden Kindprozesse mehr übrig
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
Rückgabewert könnte null oder nicht null sein, je nachdem ob
bereits ein Fehler aufgetreten ist.
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 festgelegt 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 postiven (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 Nachrichtenkatalog 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), die in POSIX nicht gültig sind
unterstützt, 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, -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 Bibiliotheksfunktion 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 Nachrichten
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-Nachrichtenkataloge.
- 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 implziert
-nowarn), da POSIX erfordert, dass unabhängig von der
Ausgabe von -ok, alle Nachrichten 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
Nachrichtenkatalogen des Systems ab, im Gegensatz zur Beachtung der
eigenen Nachrichtenübersetzungen von find.
- TZ
- beeinflußt die Zeitzone, die für einige zeitbezogene
Formatanweisungen von -printf und -fprintf benutzt
wird.
find /tmp -name core -type f -print | xargs /bin/rm -f
sucht Dateien mit dem Namen core in oder unterhalb des
Verzeichnisses /tmp und löscht diese. Beachten Sie, dass dies
nicht korrekt funktioniert, falls die Dateinamen Zeilenvorschübe,
einfache oder doppelte Anführungszeichen 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 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. Der Test -name kommt in der Reihenfolge
vor dem Test -type, um zu verhindern, dass stat(2) für
jede Datei aufgerufen wird.
find . -type f -exec file '{}' \;
führt »file« für jede Datei in oder unterhalb des
aktuellen Verzeichnisses aus. 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.
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 große Dateien in /root/big.txt
auflisten.
find $HOME -mtime 0
sucht nach Dateien in Ihrem Home-Verzeichnis, die in den letzten 24 Stunden
geändert wurden. 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.
find /sbin /usr/sbin -executable \! -readable -print
sucht Dateien, die ausführbar, aber nicht lesbar sind
find . -perm 664
sucht nach Dateien, die Lese- und Schreibrechte für ihren Benutzer und
ihre Gruppe haben, aber von anderen Benutzern gelesen, aber nicht geschrieben
werden können. Dateien, die diesem Kriterium entsprechen, aber andere
Rechte-Bits gesetzt haben (zum Beispiel, wenn jemand die Datei
ausführen kann), werden nicht passen.
find . -perm -664
sucht nach Dateien, 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. Dies wird
beispielsweise auf eine Datei mit dem Modus 777 passen.
find . -perm /222
sucht nach Dateien, die für 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 müssen nicht
sowohl für Besitzer und Gruppe schreibbar sein, um zu passen; eines
genügt.
find . -perm -220
find . -perm -g+w,u+w
Beide Befehle tun dasselbe; sie suchen nach Dateien, die sowohl für ihren
Besitzer als auch für 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 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).
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,
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. 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.
find repo/ \( -exec test -d '{}'/.svn \; -or \
-exec test -d {}/.git \; -or -exec test -d {}/CVS \; \) \
-print -prune
Beim folgenden gegebenen Verzeichnis mit Projekten und den damit
verbundenen Versionsverwaltungsverzeichnissen wird eine effiziente Suche
nach den Wurzeln der Projekte durchgeführt:
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.
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 \)
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.
locate(1), locatedb(5), updatedb(1),
xargs(1), chmod(1), fnmatch(3), regex(7),
stat(2), lstat(2), ls(1), printf(3),
strftime(3), ctime(3)
Die vollständige Dokumentation für find wird
als Texinfo-Handbuch gepflegt. Wenn die Befehle info und find
korrekt auf Ihrem Syste installiert sind, erhalten Sie mit info find
Zugriff auf das vollständige Handbuch.
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 |
-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.
Überraschungen bei Operatorenvorrangsregeln
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 festgelegt 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
Copyright © 1990-2019 Free Software Foundation, Inc. Lizenz
GPLv3+: GNU GPL Version 3 oder neuer
<https://gnu.org/licenses/gpl.html>.
Dies ist freie Software: Sie können sie verändern und
weitergeben. Es gibt KEINE GARANTIE, soweit gesetzlich zulässig.
Es gibt dort Sicherheitslücken, die dem Verhalten anhaften,
das der POSIX-Standard für find spezifiziert 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. 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 https://savannah.gnu.org/bugs/?group=findutils. Der Grund
dafür liegt darin, dass Sie den Prozess, wie das Problem behoben
wird, verfolgen können. Andere Kommentare über find(1)
und über das Paket Findutils im Allgemeinen können 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.
ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von
Chris Leick <c.leick@vollbio.de>, Mario Blättermann
<mario.blaettermann@gmail.com>, Dr. Tobias Quathamer
<toddy@debian.org> und Helge Kreutzmann <debian@helgefjell.de>
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
<debian-l10n-german@lists.debian.org>.