Provided by: manpages-de_1.11-1_all 

BEZEICHNUNG
find - in einer Verzeichnishierarchie nach Dateien suchen
ÜBERSICHT
find [-H] [-L] [-P] [-D Fehlersuchoptionen] [-Olevel] [Startpunkt …] [Ausdruck]
BESCHREIBUNG
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 die 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.
OPTIONEN
Die Optionen -H, -L und -P steuern den Umgang mit symbolischen Links. Darauf folgende
Befehlszeilenparameter werden als zu untersuchende Datei- oder Verzeichnisnamen betrachtet, bis ein
Parameter mit einem »-« beginnt oder ein »(« oder »!«, ist. Solche und alle folgenden Parameter werden
als Ausdruck interpretiert, der beschreibt, wonach gesucht werden soll. Wenn kein Pfad angegeben wurde,
wird das aktuelle Verzeichnis genommen. Wenn kein Ausdruck angegeben ist, wird der Ausdruck -print
benutzt (aber Sie sollten vermutlich sowieso in Betracht ziehen, stattdessen -print0 zu verwenden).
Dieses Handbuch spricht von »Optionen« innerhalb einer Liste von 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 sollen die
Informationen des symbolischen Links selbst verwendet werden.
-L symbolischen Links folgen. Wenn find eine Datei untersucht oder Informationen über diese ausgibt,
dann sollten die Informationen der Datei verwendet werden, auf die der symbolische Link verweist,
nicht die des Links selbst (es sei denn, der symbolische Link ist kaputt oder find nicht in der
Lage, die Datei zu untersuchen, auf die der Link zeigt). Die Verwendung dieser Option impliziert
die Option -noleaf. Wenn Sie 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, sollen die
verwendeten Informationen vom symbolischen Link selbst benutzt werden. Die einzige Ausnahme dieses
Verhaltens ist, wenn eine in der Befehlszeile angegebene Datei ein symbolischer Link ist und dem
Link gefolgt werden kann. In dieser Situation werden die Informationen der Datei genommen, auf die
der symbolische Link verweist (das bedeutet, dass dem Link gefolgt wird). Die Informationen ü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:
help Erklärt die Debugging-Optionen
tree zeigt den Ausdrucksbaum in seiner originalen und optimierten Form.
stat meldet, wenn Dateien mit den Systemaufrufen stat und lstat untersucht werden. Das Programm
find versucht, die Anzahl solcher Aufrufe zu minimieren.
opt gibt Diagnoseinformationen 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.
-Olevel
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.
AUSDRUCK
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 (das sie -depth impliziert).
POSITIONSOPTIONEN
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
Global options always return true. Global options take effect even for tests which occur earlier on the
command line. To prevent confusion, global options should specified on the command-line after the list of
start points, just before the first test, positional option or action. If you specify a global option in
some other place, find will issue a warning message explaining that this can be confusing.
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.
-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
TESTS
Einige Tests, zum Beispiel -newerXY und -samefile erlauben den Vergleich der aktuell untersuchten Datei
und irgendwelchen Referenzdateien, die auf der Befehlszeile angegeben wurden.Wenn diese Tests benutzt
werden, wird die Interpretation der Referenzdatei durch die Optionen -H, -L, -P und jedem vorhergehenden
-follow festgelegt, die Referenzdatei wird nur einmal zu dem Zeitpunkt untersucht, an dem die
Befehlszeile ausgewertet wird. Falls die Referenzdatei nicht untersucht werden kann (weil zum Beispiel
der Systemaufruf stat(2) 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). 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 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 wird in einer zukünftigen Version Teil des POSIX-Standards werden.
-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 zu auf lesbare Dateien. 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, 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 Kilobyte (Einheiten aus 1024 Byte)
»M« für Megabyte (Einheiten aus 1048576 Byte)
»G« für Gigabyte (Einheiten aus 1073741824 Byte)
The size does not count indirect blocks, but it does count blocks in sparse files that are not
actually allocated. Bear in mind that the `%k' and `%b' format specifiers of -printf handle sparse
files differently. The `b' suffix always denotes 512-byte blocks and never 1 Kilobyte blocks,
which is different to the behaviour of -ls.
The + and - prefixes signify greater than and less than, as usual. Bear in mind that the size is
rounded up to the next unit. Therefore -size -1M is not equivalent to -size -1048576c. The former
only matches empty files, the latter matches files from 1 to 1,048,575 bytes.
-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)
-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 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.
AKTIONEN
-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.
-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. Der Befehl wird im Startverzeichnis ausgeführt. 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. 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. 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 1K-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 »%«-Direktiven.
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 Direktiven sind:
\a Alarmton
\b Rückschritt
\c Ausgabe gemäß dieser Formatbeschreibung sofort stoppen und die Ausgabe leeren
\f Seitenvorschub
\n Zeilenvorschub
\r Wagenrücklauf
\t horizontaler Tabulator
\v vertikaler Tabulator
\0 ASCII-Code 0
\\ der Rückwärtsschrägstrich selbst (»\«)
\NNN das Zeichen, dessen ASCII-Kode 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 Direktive 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 time, 24-hour (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 locale's time representation (H:M:S). The seconds field includes a fractional part.
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
Bezeichner %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 1K-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 Direktive wird von
Findutils seit einschließlich Version 4.2.5 unterstützt.
%n Anzahl harter Links auf die Datei
%p Name der Datei
%P Der Name der Datei mit dem Namen des Startpunkts, unter dem sie gefunden wurde, wurde
entfernt.
%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. 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
%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 Direktiven %m und %d unterstützen die Schalter # , 0 und +, die anderen Direktiven jedoch
nicht, selbst wenn Nummern ausgegeben werden. Numerische Direktiven, 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.
OPERATOREN
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 POSIX-konform
Ausdruck1 Ausdruck2
Zwei Ausdrücke in einer Reihe werden mit enem impliziten »and« verbunden; Ausdruck2 wird nicht
ausgewertet, wenn Ausdruck1 falsch ist.
Ausdruck1 -a Ausdruck2
entspricht Ausdruck1 Ausdruck2
Ausdruck1 -and Ausdruck2
entspricht Ausdruck1 Ausdruck2, ist aber POSIX-konform
Ausdruck1 -o Ausdruck2
oder; Ausdruck2 wird nicht ausgewertet, falls Ausdruck1 wahr ist
Ausdruck1 -or Ausdruck2
entspricht Ausdruck1 -o Ausdruck2, ist aber nicht POSIX-konform
Ausdruck1, Ausdruck2
Liste; sowohl Ausdruck1 als auch Ausdruck2 werden immer ausgewertet. Der Wert von Ausdruck1 wird
verworfen; der Wert der Liste ist der Wert von Ausdruck2. Der Kommaoperator kann 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.
Please note that -a when specified implicitly (for example by two tests appearing without an explicit
operator between them) or explicitly has higher precedence than -o. This means that find . -name afile -o
-name bfile -print will never print afile.
UNÜBLICHE DATEINAMEN
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 Direktive benutzt wird. Die Direktiven %D, %F, %g, %G, %H, %Y und %y
expandieren die Werte, die nicht unter der Kontrolle des Dateibesitzers stehen und werden daher in
der vorliegenden Form gedruckt. Die Direktiven %a, %b, %c, %d, %i, %k, %m, %M, %n, %s, %t, %u und
%U haben Werte, die unter der Kontrolle des Dateibesitzers der Datei stehen, die aber nicht
benutzt werden können, um beliebige Daten an das Terminal zu senden und daher unverändert gedruckt
werden. Die Direktiven %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.
STANDARDKONFORMITÄT
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, 2003 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 repräsentiert, wo diese vom Betriebsystem bereitgestellt wird.
-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 Prädikate
Die Prädikate -atime, -ctime, -depth, -group, -links, -mtime, -nogroup, -nouser, -print, -prune,
-size, -user und -xdev sowie `-atime', `-ctime', `-depth', `-group', `-links', `-mtime',
`-nogroup', `-nouser', `-perm', `-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 soll 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.
UMGEBUNGSVARIABLEN
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 Formatdirektiven von -printf und -fprintf
benutzt wird.
BEISPIELE
find /tmp -name core -type f -print | xargs /bin/rm -f
sucht Dateien mit dem Namen core in oder unterhalb des Verzeichnisses /tmp und 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.
RÜCKGABEWERT
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.
SIEHE AUCH
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.
GESCHICHTE
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.
KEINE FEHLER
Operator precedence surprises
The command find . -name afile -o -name bfile -print will never print afile because this is actually
equivalent to find . -name afile -o \( -name bfile -a -print \). Remember that the precedence of -a is
higher than that of -o and when there is no operator specified between tests, -a is assumed.
“paths must precede expression” error message
$ find . -name *.c -print
find: paths must precede expression
Usage: find [-H] [-L] [-P] [-Olevel] [-D ... [path...] [expression]
Dies geschieht, da *.c durch die Shell expandiert wurde, was dazu führt, dass find tatsächlich eine
Befehlszeile wie diese bekommt:
find . -name frcode.c locate.c word_io.c -print
Der Befehl wird sicherlich nicht funktionieren. Statt dies auf diese Weise zu tun, sollten Sie die Muster
in Anführungszeichen setzen oder den Platzhalter maskieren.
$ find . -name '*.c' -print
$ find . -name \*.c -print
FEHLER
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
http://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> und Mario
Blättermann <mario.blaettermann@gmail.com> 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>.
FIND(1)