BEZEICHNUNG¶
find - in einer Verzeichnishierarchie nach Dateien suchen
ÜBERSICHT¶
find [-H] [-L] [-P] [-D Fehlersuchoptionen] [-Olevel] [Pfad …]
[Ausdruck]
BESCHREIBUNG¶
Diese Handbuchseite beschreibt die GNU Version von
find. GNU-
find
durchsucht die Verzeichnisbäume, die seinen Ursprung bei den angegebenen
Dateinamen haben und wertet dabei den Ausdruck von links nach rechts
entsprechend der Operatorenrangfolge aus (siehe Abschnitt OPERATOREN) bis das
Ergebnis ermittelt ist (die linke Seite falsch ist für
UND-Operatoren und wahr für
ODER-Operatoren).
Anschließend fährt
find mit der nächsten Datei fort.
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 angewandt, auf die
ein symbolischer Link zeigt, anstatt auf den Link selbst (es sei denn, der
symbolische Link ist kaputt). Die Verwendung von -L bewirkt, dass
die 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 exisitierende Datei
verweist), werden die Eigenschaften des Links selbst benutzt.
Wenn die Optionen
-H oder
-L in Kraft sind, wird jeder symbolische
Link als Argument von
-newer dereferenziert und der Zeitstempel wird
von der Datei genommen, auf die der symbolische Link verweist. Die gleichen
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.
- 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.
AUSDRÜCKE¶
Der Ausdruck besteht aus Optionen (die nur das allgemeine Verhalten der
Operationen bestimmen, aber nicht die Verarbeitung einer bestimmten Datei
beeinflussen und immer wahr zurückgeben), Tests (die ein wahr oder falsch
zurückgeben) und Aktionen (die Seiteneffekte haben und wahr oder falsch
zurückgeben), jeweils durch Operatoren getrennt. Wenn der Operator
weggelassen wird, wird
-and angenommen.
Wenn der Ausdruck keine andere Aktion als
-prune enthält, wird
für alle Dateien, für welche der Ausdruck wahr ergibt, die Aktion
-print durchgeführt.
OPTIONEN¶
Alle Optionen geben immer wahr zurück. Mit der Ausnahme von
-daystart,
-follow und
-regextype beeinflussen sie alle
Tests einschließlich derer, die vor der Option angegeben sind. Dies
rührt daher, dass die Optionen verarbeitet werden, wenn die Befehlszeile
ausgewertet wird, wohingegen die Tests nichts tun, bis Dateien untersucht
werden. Die Optionen
-daystart,
-follow und
-regextype
unterscheiden sich in dieser Hinsicht und beeinflussen nur nur Tests, die
später auf der Befehlszeile erscheinen. Daher ist es für die
Lesbarkeit besser, sie an den Anfang des Ausdrucks zu stellen. Eine Warnung
wird ausgegeben, wenn Sie das nicht tun.
- -d
- ein Synonym für -depth, für die
Kompatibilität mit FreeBSD, NetBSD, MacOS X und OpenBSD.
- -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.
- -depth
- bearbeitet den Inhalt jedes Verzeichnisses vor dem
Verzeichnis selbst. Die Aktion -delete impliziert ebenfalls -depth.
- -follow
- missbilligt; verwenden Sie stattdessen die Option
-L; dereferenziert symbolische Links; impliziert -noleaf.
Die Option -follow beeinflusst nur jene Tests, die nach ihr auf der
Befehlszeile erscheinen. Wenn die Option -H oder -L nicht
angegeben wird, ä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 angewandt, 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.
- -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 Befehlszeilenargumente
hinab. -maxdepth 0 bedeutet, dass die Tests und Aktionen nur auf
die Befehlszeilenargumente angewandt werden.
- -mindepth Ebenen
- keine Tests oder Aktionen auf Ebenen kleiner als
Ebenen (eine nicht negative Ganzzahl) anwenden. -mindepth 1
bedeutet, dass alle Dateien mit Ausnahme der Befehlszeilenargumente
verarbeitet werden.
- -mount
- keine Verzeichnisse auf anderen Dateisystemen hinabsteigen.
Ein alternativer Name 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.
- -regextype Typ
- Ändert die Syntax regulärer Ausdrücke, die
von -regex- und -iregex-Tests verstanden werden, die
später auf der Befehlszeile auftreten. Derzeit implementierte Typen
sind »emacs« (das ist die Vorgabe), »posix-awk«,
»posix-basic«, »posix-egrep« und
»posix-extended«.
- -version, --version
- gibt die Versionsnummer von find aus und wird
beendet
- -warn, -nowarn
- schaltet Warnungen ein oder aus. Diese Warnungen betreffen
nur die Benutzung der Befehlszeile, nicht 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.
- -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. In diesen Mustern können, im Gegensatz zur
Dateinamensexpansion durch die Shell, auch Dateinamen mit einem
».« am Anfang von einem »*« abgedeckt sein. Daher wird
find -name *bar auch Dateien wie ».foo-bar«
finden. Bitte beachten Sie, dass Sie die Muster mit Anführungszeichen
umschließen, ansonsten werden sämtliche Platzhalterzeichen
bereits von der Shell expandiert.
- -inum n
- Datei hat die Inode-Nummer n. Es ist normalerweise
einfacher, stattdessen den Test -samefile zu benutzen.
- -ipath Muster
- verhält sich wie -iwholename. Diese Option ist
missbilligt, benutzen Sie sie daher bitte nicht.
- -iregex Muster
- wie -regex, aber der Treffer berücksichtigt
keine Groß-/Kleinschreibung
- -iwholename Muster
- wie -wholename, aber der Treffer berücksichtigt
keine Groß-/Kleinschreibung
- -links n
- Datei hat n Links.
- -lname Muster
- Datei ist ein symbolischer Link, dessen Inhalt zum
Shell-Muster Muster passt. Insbesondere behandeln die Metazeichen
nicht »/« oder ».«. Falls die Optionen -L oder
-follow in Kraft sind, gibt dieser Test falsch 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. 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
- Vergleicht den Zeitstempel der aktuellen Datei mit
Bezug. Das Argument Bezug ist normalerweise der Name einer
Datei (und einer ihrer Zeitstempel wird für den Vergleich benutzt),
aber es könnte auch eine Zeichenkette sein, die eine absolute Zeit
beschreibt. X und Y sind Platzhalter für andere
Buchstaben. Diese Buchstaben wählen aus, welche zugehörige Zeit
für den Vergleich mit Bezug benutzt wird.
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 angewandt
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
Das Prädikat -path wird auch auf HP-UX durch find
unterstützt und wird in einer kommenden Version des POSIX-Standards
enthalten sein.
- -perm Modus
- Die Zugriffsrechte der Datei entsprechen exakt dem
Modus (oktal oder symbolisch). Da exakte Ü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
- missbilligt. Dies ist die alte Methode nach Dateien zu
suchen, deren Rechte-Bits in Modus gesetzt sind. Sie sollten
stattdessen -perm /Modus benutzen. Der Versuch, die
»+«-Syntax mit symbolischen Links zu verwenden, wird zu
überraschenden Ergebnissen führen. »u+x« ist
beispielsweise ein gültiger symbolischer Modus (entspricht +u,+x,
d.h. 0111) und wird daher nicht von -perm +Modus
ausgewertet, stattdessen aber als die genaue Modusangabe -perm
Modus. Daher entspricht es Dateien mit exakt den Rechten 0111
anstatt den Dateien, deren Ausführungs-Bit gesetzt ist. Falls Sie
diesen Paragraph verwirrend finden, stehen Sie damit nicht allein da
– benutzen Sie nur -perm /Modus. Diese Form des Tests
-perm ist missbilligt, da die POSIX-Spezifikation eine
Interpretation des führenden »+« als Teil des symbolischen
Modus erfordert, wodurch stattdessen zur Benutzung von »/«
gewechselt wird.
- -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. 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)
- Zur Ermittlung der Größe werden keine indirekten
Blöcke gezählt, aber Blöcke in Datei mit Löchern
(Sparse-Dateien), die nicht wirklich reserviert sind. Vergessen Sie nicht,
dass die Formatbezeichner »%k« und »%b« von
-printf Dateien mit Löchern unterschiedlich handhaben. Die
Endung »b« kennzeichnet immer 512-Byte-Blöcke und nie
1-Kilobyte-Blöcke, was sich vom Verhalten von -ls
unterscheidet.
- -true
- immer wahr
- -type c
- Datei ist vom Typ c;:
- b
- blockorientierte Spezialdatei (gepuffert)
- c
- zeichenorientierte Spezialdatei (nicht gepuffert)
- d
- Verzeichnis
- p
- benannte Pipe (FIFO)
- f
- 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.
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.
- -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.
- -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
- Zeit, 24 Stunden (hh:mm:ss)
- +
- Datum und Zeit, getrennt durch »+«, zum Beispiel
»2004-04-28+22:22:05.0«. Dies ist eine GNU-Erweiterung. Die Zeit
wird in der aktuellen Zeitzone angegeben (die durch das Setzen der
Umgebungsvariable TZ beeinflusst sein könnte). Das Sekundenfeld
beinhaltet einen Bruchteil.
- X
- Zeitdarstellung der Locale (H:M:S)
- Z
- Zeitzone (z.B. EDT) oder nichts, falls keine Zeitzone
bestimmt werden kann
Datumsfelder:
- a
- 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
- das Befehlszeilenargument, 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
Befehlszeilenarguments, 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 verwandt 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 Bemutzers der Datei oder numerische
Benutzerkennzahl, falls der Benutzer keinen Namen hat.
- %U
- numerische Benutzerkennzahl der Datei.
- %y
- Typ der Datei (wie in ls -l), U=unbekannter Typ
(sollte nicht auftreten)
- %Y
- Typ der Datei (wie %y), folgt aber symbolischen Links:
L=Schleife, N=nicht existent
Ein »%«-Zeichen gefolgt von einem anderen Zeichen wird verworfen, aber
das andere Zeichen wird ausgegeben (verlassen Sie sich nicht darauf, da
weitere Formatzeichen eingeleitet werden 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.
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.
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.
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 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 -o -d {}/.git -o -d {}/CVS ; \
-print -prune
Beim folgenden gegebenen Verzeichnis mit Projekten und den damit verbundenen
Versionsverwaltungsverzeichnissen wird eine effiziente Suche nach den Wurzeln
der Projekte 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.
SIEHE AUCH¶
chmod(1),
locate(1),
ls(1),
updatedb(1),
xargs(1),
lstat(2),
stat(2),
ctime(3),
fnmatch(3),
printf(3),
locatedb(5),
strftime(3),
regex(7),
Finding Files (online in Info oder ausgegeben).
GESCHICHTE¶
Ab findutils-4.2.2 stimmen Shell-Metazeichen (»*«, »?« oder
»[]« zum Beispiel), die in Mustern für Dateinamen verwendet
werden, mit einem führenden ».« überein, da die
Interpretation 126 von IEEE POSIX dies erfordert.
Die Syntax
-perm +MODE wurde in findutils-4.2.21 zugunsten von
-perm /MODUS missbilligt. Ab findutils-4.3.3 passt
-perm
/000 nun auf alle Dateien statt auf keine.
Zeitstempel in 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 |
|
KEINE FEHLER¶
$ find . -name *.c -print
find: Pfad muss vor dem Ausdruck stehen
Aufruf: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [Pfad …] [Ausdruck]
Dies geschieht, da
*.c durch die Shell expandiert wurde, was dazu
führt, dass
find tatsächlich eine Befehlszeile wie diese
bekommt:
find . -name bigram.c code.c frcode.c locate.c -print
Der Befehl wird sicherlich nicht funktionieren. Statt dies auf diese Weise zu
tun, sollten Sie die Muster in Anführungszeichen setzen oder den
Platzhalter maskieren.
$ 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 verwandt werden. Bitte
lesen Sie den Abschnitt
Finding Files, um weitere Informationen zu
erhalten.
Die Umgebungsvariable
LC_COLLATE hat keinen Einfluss auf die Aktion
-ok.
Der beste Weg, einen Fehler zu melden, ist die Benutzung des Formulars auf
http://savannah.gnu.org/bugs/?group=findutils. Der Grund 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> 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>.