FIND(1) General Commands Manual FIND(1) BEZEICHNUNG find - in einer Verzeichnishierarchie nach Dateien suchen UBERSICHT find [-H] [-L] [-P] [-D Fehlersuchoptionen] [-OStufe] [Startpunkt ] [Ausdruck] BESCHREIBUNG Diese Handbuchseite beschreibt die GNU-Version von find. GNU-find durchsucht die Verzeichnisbaume, 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 fur UND-Operatoren und wahr fur ODER-Operatoren). Anschliessend fahrt find mit der nachsten 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 fur andere Anwender schreibbar sind), sollten Sie das Kapitel >>Security Considerations<< der Findutils-Dokumentation lesen, die Finding Files heisst und den Findutils beigefugt ist. Dieses Dokument enthalt ausserdem mehr Einzelheiten und Erorterungen als diese Handbuchseite, so dass Sie es als eine nutzlichere Informationsquelle empfinden konnten. OPTIONEN Die Optionen -H, -L und -P steuern den Umgang mit symbolischen Links. Darauf folgende Befehlszeilenparameter werden als zu untersuchende Datei- oder Verzeichnisnamen betrachtet, bis ein Parameter mit einem >>-<< beginnt oder ein >>(<< oder >>!<<, ist. Solche und alle folgenden Parameter werden als Ausdruck interpretiert, der beschreibt, wonach gesucht werden soll. Wenn kein Pfad angegeben wurde, wird das aktuelle Verzeichnis genommen. Wenn kein Ausdruck angegeben ist, wird der Ausdruck -print benutzt (aber Sie sollten vermutlich sowieso in Betracht ziehen, stattdessen -print0 zu verwenden). Dieses Handbuch spricht von >>Optionen<< innerhalb einer Liste von Ausdrucken. Diese Optionen steuern das Verhalten von find, werden aber direkt nach dem letzten Pfadnamen angegeben. Die funf >>echten<< Optionen -L, -P, -D und -O mussen wenn dann vor dem ersten Pfadnamen erscheinen. Ausserdem konnte ein doppeltes Minuszeichen -- theoretisch benutzt werden, um zu signalisieren, dass die verbleibenden Argumente keine Optionen sind, aber das funktioniert nicht wirklich, da find das Ende der folgenden Pfadargumente ermittelt: Es liest bis zu einem Ausdrucksargument (das auch mit >>-<< beginnt). Falls nun ein Pfadargument mit einem >>-<< beginnen wurde, dann wurde find dieses stattdessen als Ausdrucksargument auffassen. Um sicher zu stellen, dass alle Startpunkte als solche aufgefasst werden, und insbesondere um zu verhindern, dass durch die aufrufende Shell expandierte Platzhaltermuster falschlicherweise als Ausdrucksargumente interpretiert werden, ist es daher im Allgemeinen sicherer, Platzhaltern oder fragwurdigen Pfadnamen entweder >>./<< voranzustellen oder absolute Pfadnamen zu verwenden, die mit >>/<< beginnen. Alternativ ist es generell sicher, die (allerdings unportable) GNU-Option -files0-from hinzuzufugen, mit der Sie beliebige Startpunkte an find ubergeben konnen. -P keinen symbolischen Links folgen. Dies ist das Standardverhalten. Wenn find Dateien untersucht oder Informationen uber diese ausgibt und die Datei ein symbolischer Link ist, dann mussen die Informationen des symbolischen Links selbst verwendet werden. -L symbolischen Links folgen. Wenn find eine Datei untersucht oder Informationen uber diese ausgibt, dann mussen die Informationen der Datei verwendet werden, auf die der symbolische Link verweist, nicht die des Links selbst (es sei denn, der symbolische Link ist kaputt oder find nicht in der Lage, die Datei zu untersuchen, auf die der Link zeigt). Die Verwendung dieser Option impliziert die Option -noleaf. Wenn Sie spater die Option -P verwenden, wird -noleaf immer noch Auswirkungen haben. Wenn -L aktiv ist und find wahrend seiner Suche einen symbolischen Link zu einem Unterverzeichnis vorfindet, wird das Unterverzeichnis durchsucht, auf das der symbolische Link zeigt. Wenn die Option -L in Kraft ist, wird das Pradikat -type immer auf den Typ der Datei angewendet, auf die ein symbolischer Link zeigt, anstatt auf den Link selbst (es sei denn, der symbolische Link ist kaputt). Aktionen die symbolische Links zerstoren, wahrend find ausgefuhrt wird (zum Beispiel -delete), konnen verwirrendes Verhalten verursachen. Die Verwendung von -L bewirkt, dass die Pradikate -lname und -ilname immer falsch zuruckliefern. -H keinen symbolischen Links folgen, es sei denn, die Parameter in der Befehlszeile werden ausgewertet. Wenn find Dateien untersucht oder Informationen uber diese ausgibt, mussen die verwendeten Informationen vom symbolischen Link selbst benutzt werden. Die einzige Ausnahme dieses Verhaltens ist, wenn eine in der Befehlszeile angegebene Datei ein symbolischer Link ist und dem Link gefolgt werden kann. In dieser Situation werden die Informationen der Datei genommen, auf die der symbolische Link verweist (das bedeutet, dass dem Link gefolgt wird). Die Informationen uber den Link selbst dienen als Ruckgriff fur den Fall, dass die Datei, auf die der symbolische Link verweist, nicht untersucht werden kann. Wenn -H in Kraft ist und einer der Pfade, die auf der Befehlszeile angegeben wurden, ein symbolischer Link zu einem Verzeichnis ist, werden die Inhalte dieses Verzeichnisses untersucht (was naturlich -maxdepth 0 verhindern wurde). Falls mehr als eine der Optionen -H, -L und -P angegeben ist, setzt jedes die anderen ausser Kraft; das letzte, das auf der Befehlszeile erscheint, gilt. Die Option -P ist die Voreinstellung. Wenn weder -H noch -L angegeben wurden, ist es, als ware dies angegeben worden. GNU-find fragt oft Datei-Informationen wahrend der Verarbeitung der Befehlszeile selbst ab, bevor irgendeine Suche begonnen hat. Diese Optionen beeinflussen auch, wie diese Argumente verarbeitet werden. Insbesondere gibt es einige Tests, die Dateien auf der Befehlszeile mit einer aktuell betrachteten Datei vergleichen. Die Datei, die auf der Befehlszeile angegeben wird, wird auf jeden Fall untersucht und einige Ihrer Eigenschaften werden gespeichert. Falls die genannte Datei ein symbolischer Link ist und die Option -P in Kraft ist (oder falls weder -H noch -L angegeben wurden), wird die fur den Vergleich benutzte Information aus den Eigenschaften des symbolischen Links genommen. Anderenfalls wird sie aus den Eigenschaften der Datei genommen, auf die der Link verweist. Falls find dem Link nicht folgen kann (zum Beispiel, weil es nicht uber ausreichende Rechte verfugt oder der Link auf eine nicht 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 Erwagungen gelten fur -newerXY, -anewer und -cnewer. Die Option -follow hat ahnliche Auswirkungen wie -L, obwohl sie an dem Punkt in Kraft tritt, an dem sie erscheint (sprich, wenn -L nicht benutzt wird, aber -follow, werden alle symbolischen Links, die nach -follow auf der Befehlszeile erscheinen, vorher dereferenziert). -D Debug-Optionen Diagnoseinformationen ausgeben; dies kann hilfreich sein, um Probleme zu diagnostizieren, warum find nicht das tut, was Sie mochten. Die Liste der Debug-Optionen sollte durch Kommas getrennt sein. Kompatibilitat der Debug-Optionen ist zwischen den unterschiedlichen Versionen der Findutils nicht gewahrleistet. Um eine vollstandige Liste der gultigen Optionen zu erhalten, lesen Sie die Ausgabe von find -D help. Gultige Debug-Optionen sind unter anderem: exec zeigt Diagnostikinformationen mit Bezug zu -exec, -execdir, -ok und -okdir an. opt gibt Diagnoseinformationen bezuglich der Optimierung des Ausdrucksbaums aus; siehe die Option -O. rates gibt eine Zusammenfassung aus, die angibt, wie oft jedes Pradikat erfolgreich war oder fehlschlug. search durchlauft den Verzeichnisbaum ausfuhrlich. stat meldet, wenn Dateien mit den Systemaufrufen stat und lstat untersucht werden. Das Programm find versucht, die Anzahl solcher Aufrufe zu minimieren. tree zeigt den Ausdrucksbaum in seiner originalen und optimierten Form. all aktiviert alle anderen Debug-Optionen (ausser help). help erklart die Debugging-Optionen. -OStufe aktiviert Abfragenoptimierung. Das Programm find ordnet Tests neu an, um die Ausfuhrung zu beschleunigen, ohne das Gesamtergebnis zu andern; das heisst, Pradikate mit Seiteneffekten werden im Gegensatz zu anderen nicht neu angeordnet. Die Optimierungen die auf jeder Optimierungsstufe durchgefuhrt werden, sind wie folgt. 0 entspricht der Optimierungsstufe 1 1 Dies ist die Standardoptimierungsstufe und entspricht dem traditionellen Verhalten. Ausdrucke werden neu angeordnet, so dass Tests, die nur auf den Namen der Dateien basieren (zum Beispiel -name und -regex) zuerst durchgefuhrt werden. 2 Irgendwelche -type- oder -xtype-Tests werden nach allen Tests, die nur auf Dateinamen basieren, aber vor Tests, die Informationen aus dem Inode benotigen, durchgefuhrt. Auf vielen modernen Versionen von Unix werden Dateitypen durch readdir() zuruckgegeben und daher sind diese Pradikate schneller auszuwerten als Pradikate, die zuerst stat fur die Datei ausfuhren mussen. Wenn Sie beim Start von find das Pradikat FOO fur -fstype verwenden und einen unbekannten Dateisystemtyp FOO angeben (in >>/etc/mtab<< aufgefuhrt), entspricht dies dem Pradikat -false. 3 Auf dieser Optimierungsstufe ist der vollstandig kostenbasierte Optimierer aktiviert. Die Reihenfolge der Tests wird geandert, so dass gunstige (d.h. schnelle) Tests zuerst und die teureren spater durchgefuhrt werden, falls notig. Innerhalb jeder Kostenebene werden Pradikate fruher oder spater ausgewertet, je nachdem, ob sie wahrscheinlich erfolgreich sein werden oder nicht. Fur -o werden Pradikate, die wahrscheinlich erfolgreich sind, fruher ausgewertet und fur -a werden Pradikate, die wahrscheinlich fehlschlagen, fruher ausgewertet. Der kostenbasierte Optimierer hat eine feste Vorstellung davon, wie wahrscheinlich ein gegebener Test erfolgreich ist. In einigen Fallen tragt die Wahrscheinlichkeit einer bestimmten Eigenheit des Tests Rechnung (zum Beispiel wird von -type f angenommen, dass es eher erfolgreich ist, als -type c). Der kostenbasierte Optimierer wird derzeit untersucht. Falls er nicht wirklich die Leistung von find verbessert, wird er wieder entfernt. Im umgekehrten Fall werden Optimierungen, die beweisen, dass sie zuverlassig, robust und effektiv sind, im Lauf der Zeit auf niedrigeren Optimierungsstufen aktiviert. Das Standardverhalten (d.h. Optimierungsstufe 1) wird jedoch nicht in der 4.3.x-Veroffentlichungsserie geandert. Die Test-Suite Findutils fuhrt all die Tests auf find auf jeder Optimierungsstufe aus und stellt sicher, dass das Ergebnis das Gleiche ist. AUSDRUCK Der Teil der Befehlszeile nach der Liste der Startpunkte ist der Ausdruck. Dies ist eine Abfragespezifikation, die die Suche nach ubereinstimmenden Dateien und den Umgang mit den gefundenen Dateien beschreibt. Ein Ausdruck ist eine Abfolge von: Tests Tests geben >>wahr<< oder >>falsch<< zuruck, normalerweise auf Basis einer Eigenschaft einer zu berucksichtigenden Datei. Der Test -empty beispielsweise gibt >>wahr<< zuruck, wenn die Datei leer ist. Aktionen Aktionen haben Folgeeffekte (zum Beispiel Meldungen in der Standardausgabe) und geben entweder >>wahr<< oder >>falsch<< zuruck, abhangig 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<< zuruck. Die Option -depth beispielsweise durchsucht das Dateisystem in der angegebenen Tiefe. Positionsoptionen Positionsoptionen beeinflussen nur Tests, die darauf folgen. Positionale Optionen geben stets >>wahr<< zuruck. Die Option -regextype beispielsweise ist positional. Sie gibt den >>Dialekt<< der regularen Ausdrucke an, die danach in der Befehlszeile angegeben werden. Operatoren Operatoren verbinden die anderen Elemente innerhalb des Ausdrucks. Beispielsweise stellen -o ein logisches ODER und -a ein logisches UND dar. Fehlt ein Operator, wird -a angenommen. Die Aktion -print wird auf allen Dateien, fur die der gesamte Ausdruck zutrifft, durchgefuhrt, ausser sie enthalt eine von -prune oder -quit abweichende Aktion. Aktionen, die die Vorgabe -print blockieren sind -delete, -exec, -execdir, -ok, -okdir, -fls, -fprint, -fprintf, -ls, -print und -printf. Die Aktion -delete wirkt auch wie eine Option (da sie -depth impliziert). POSITIONSOPTIONEN Positionsoptionen geben stets >>wahr<< zuruck. Sie beeinflussen nur Tests, die danach in der Befehlszeile aufgefuhrt werden. -daystart misst Zeiten (fur -amin, -atime, -cmin, -ctime, -mmin und -mtime) vom Beginn des aktuellen Tages anstelle der letzten 24 Stunden. Diese Option beeinflusst nur die Tests, die weiter hinten in der Befehlszeile erscheinen. -follow missbilligt; verwenden Sie stattdessen die Option -L; dereferenziert symbolische Links; impliziert -noleaf. Die Option -follow beeinflusst nur jene Tests, die nach ihr auf der Befehlszeile erscheinen. Wenn die Option -H oder -L nicht angegeben wird, andert die Position von -follow das Verhalten des Pradikats -newer. Alle Dateien, die als Argumente von -newer aufgezahlt werden, werden dereferenziert, wenn es sich bei ihnen um symbolische Links handelt. Das gilt auch fur -anewer und -cnewer. Ahnlich wird das Pradikat -type immer auf den Typ der Datei angewendet, auf den der symbolische Link zeigt und nicht auf den Link selbst. Die Verwendung von -follow hat zur Folge, dass die Pradikate -lname und -ilname immer falsch zuruckliefern. -regextype Typ Andert die Syntax regularer Ausdrucke, die von -regex- und -iregex-Tests verstanden werden, die spater auf der Befehlszeile auftreten. Die bekannten Ausdruckstypen konnen Sie mit -regextype help anzeigen lassen. Das Texinfo-Handbuch (Abschnitt SIEHE AUCH) erklart die Bedeutung verschiedener Typen regularer Ausdrucke und deren Unterschiede. -warn, -nowarn schaltet Warnungen ein oder aus. Diese Warnungen betreffen nur die Benutzung der Befehlszeile, nicht fur irgendwelche Bedingungen, auf die find beim Durchsuchen von Verzeichnissen stossen konnte. Das Standardverhalten entspricht -warn, falls die Standardeingabe ein Terminal ist und andernfalls -nowarn. Wenn eine Warnmeldung relativ zur Befehlsausfuhrung 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 Globale Optionen geben stets >>wahr<< zuruck. Sie wirken sich auch auf Tests aus, die davor in der Befehlszeile stehen. Um Verwirrung vorzubeugen, sollten globale Optionen in der Befehlszeile nach der Liste der Startpunkte angegeben werden, vor dem ersten Test, der ersten Positionsoption oder der ersten Aktion. Wenn Sie eine globale Option an einer anderen Stelle angeben, gibt find eine Warnung aus, dass dies verwirrend sein konnte. 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 fur -depth, fur die Kompatibilitat mit FreeBSD, NetBSD, MacOS X und OpenBSD. -depth bearbeitet den Inhalt jedes Verzeichnisses vor dem Verzeichnis selbst. Die Aktion -delete impliziert ebenfalls -depth. -files0-from Datei liest die Startpunkte aus der angegebenen Datei statt aus der Befehlszeile. Mit dieser Option konnen Sie eine beliebige Anzahl von Startpunkten sicher an find ubergeben; sie umgehen damit die bekannten Einschrankungen beim Ubergeben von Startpunkten in der Befehlszeile, namlich die Beschrankung der Anzahl der Dateinamen und die Moglichkeit der Verwechslung von Datei- und Optionsnamen. Mit dieser Option ist es nicht moglich, ausserdem noch Dateinamen in der Befehlszeile zu ubergeben. Beides gleichzeitig ist daher nicht erlaubt. Das Datei-Argument ist zwingend erforderlich. Sie konnen -files0-from - zum Lesen der Liste der Startpunkte aus dem Datenstrom der Standardeingabe und beispielsweise einer Pipe verwenden. In diesem Fall sind die Aktionen -ok und -okdir nicht zulassig, da sie mit dem Lesen aus der Standardeingabe kollidieren wurden, wo eine Bestatigung seitens des Benutzers nicht moglich ware. Die Startpunkte in der angegebenen Datei mussen durch ASCII-Nullbyte-Zeichen getrennt werden. Zwei aufeinanderfolgende Nullbyte-Zeichen, beispielsweise ein Startpunkt mit einem Dateinamen der Lange Null, sind nicht erlaubt. Dies wurde spater zu einem Fehler mit einem von Null verschiedenen Exit-Code fuhren. Falls die angegebene Datei leer ist, verarbeitet find keinerlei Startpunkte und beendet sich daher unmittelbar nach dem Auswerten der Programmargumente. Dies steht im Gegensatz zum Standardaufruf, bei dem find ohne ubergebenes Pfad-Argument annimmt, dass das aktuelle Verzeichnis der Startpunkt ist. Die Verarbeitung der Startpunkte geschieht ansonsten wie ublich, das heisst beispielsweise, dass find in Unterverzeichnisse absteigt, sofern es nicht anderweitig daran gehindert wird. Um lediglich die Startpunkte verarbeiten zu lassen, konnen Sie zusatzlich -maxdepth 0 ubergeben. Weitere Hinweise: Falls eine Datei in der Eingabedatei mehrmals aufgefuhrt ist, ist nicht definiert, ob diese tatsachlich mehrmals ausgewertet wird. Auch wenn sich eine Datei wahrend der Ausfuhrung von find andert, ist das Ergebnis nicht definiert. Letztendlich betrifft das auch die Suchposition innerhalb der angegebenen Datei, sei es mit -quit oder auf andere Weise. >>Nicht definiert<< bedeutet hierbei, dass es funktionieren kann, aber nicht muss und moglicherweise ein bestimmtes Ergebnis liefert, was aber wiederum auf verschiedenen Plattformen nicht zwangslaufig gleich sein muss und auch zwischen verschiedenen Versionen der findutils variieren kann. -help, --help gibt eine Zusammenfassung der Verwendung von find aus und wird beendet -ignore_readdir_race Normalerweise wird find eine Fehlermeldung ausgeben, wenn das Ausfuhren von Stat fur eine Datei fehlschlagt. Falls Sie diese Option angeben und eine Datei in der Zeit zwischen dem Lesen des Namens im Verzeichnis durch find und der Zeit geloscht wurde, in der Stat fur die Datei ausgefuhrt wird, wird keine Fehlermeldung ausgegeben. Dies gilt auch fur Dateien und Verzeichnisse, deren Namen auf der Befehlszeile angegeben wurden. Diese Option tritt dann in Kraft, wenn die Befehlszeile gelesen wird, was bedeutet, dass Sie nicht einen Teil des Dateisystem durchsuchen konnen, bei dem diese Option eingeschaltet ist und einen Teil, bei dem diese Option ausgeschaltet ist (falls Sie dies tun mussen, werden Sie stattdessen zwei find-Befehle absetzen mussen, einen mit und einen ohne der Option. Desweiteren wird find mit der Option -ignore_readdir_race Fehler der Aktion -delete ignorieren, falls die Datei verschwunden ist, seit das Elternverzeichnis gelesen wurde: es wird keine Fehlerdiagnosen ausgeben und der Ruckkehr-Code der Aktion -delete wird wahr sein. -maxdepth Ebenen steigt hochstens 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 fur -xdev aus Kompatibilitatsgrunden mit anderen Versionen von find. -noignore_readdir_race den Effekt -ignore_readdir_race ausschalten -noleaf nicht optimieren mit der Annahme, dass Verzeichnisse zwei Unterverzeichnisse weniger enthalten, als ihre Anzahl harter Links. Diese Option wird benotigt, wenn Dateisysteme durchsucht werden, die nicht den Konventionen von Unix-Verzeichnis-Links folgen, wie CD-ROM-, MS-DOS-Dateisysteme oder AFS-Datentragereinhangepunkte. Jedes Verzeichnis auf einem normalen Unix-Dateisystem hat mindestens zwei harte Links: seinen Namen und seinen >>.<<-Eintrag. Zusatzlich haben seine Unterverzeichnisse (falls vorhanden) jeweils einen >>..<<-Eintrag, der auf dieses Verzeichnis verweist. Wenn find ein Verzeichnis untersucht, weiss es, nachdem es zwei Unterverzeichnissen weniger als der Links-Anzahl des Verzeichisses begegnet ist, dass der Rest der Eintrage des Verzeichnisses keine Verzeichnisse sind (Blatter im Verzeichnisbaum). Falls nur die Namen der Dateien untersucht werden mussen, gibt es keinen Grund Stat fur sie auszufuhren; dies fuhrt zu einer spurbaren Erhohung der Suchgeschwindigkeit. -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) dafur fehlschlagt), wird eine Fehlermeldung ausgegeben und find endet mit einem Status ungleich null. Ein numerisches Argument n kann an die Tests ubergeben werden (wie -amin, -mtime, -gid, -inum, -links, -size, -uid und -used), als +n fur grosser als n, -n fur kleiner als n, n fur genau n Unterstutzte Tests: -amin n, Auf die Datei wurde zuletzt vor weniger als, mehr als oder genau n Minuten zugegriffen. -anewer Bezug Die Zeit des letzten Zugriffs auf die aktuelle Datei ist neuerer als die der letzten Veranderung der Bezugsdatei. Falls Bezug ein symbolischer Link ist und die Optionen -H oder -L in Kraft sind, wird immer die Zeit der letzten Datenveranderung der Datei benutzt, auf die er zeigt. -atime n Auf die Datei ist vor weniger als, mehr als oder genau n*24 Stunden zugegriffen worden. Wenn Find herausfindet, wieviele 24-Stundenzeitraume es her ist, seit auf die Datei zugegriffen wurde, wird jeder Bruchteil ignoriert, so dass -atime +1 auf eine Datei passt, auf die zuletzt vor zwei Tagen zugegriffen wurde. -cmin n Der Status der Datei wurde vor weniger als, mehr als oder genau n Minuten geandert. -cnewer Bezug Die Zeit der letzten Statusanderung der aktuellen Datei ist neuerer als die der letzten Datenveranderung der Bezugsdatei. Falls Bezug ein symbolischer Link ist und die Optionen -H oder -L in Kraft sind, wird immer die Zeit der letzten Datenveranderung der Datei benutzt, auf den er zeigt. -ctime n Der Dateistatus wurde zuletzt vor weniger als, mehr als oder genau n*24 Stunden geandert. Lesen Sie die Kommentare zu -atime, um zu verstehen, wie Rundung die Interpretation der Dateistatus-Anderungszeiten beeinflusst. -empty Die Datei ist leer und entweder eine regulare Datei oder ein Verzeichnis. -executable passt auf ausfuhrbare Dateien und durchsuchbare Verzeichnisse (im Sinn der Namensauflosung) des aktuellen Benutzers. Dies berucksichtigt Zugriffssteuerungslisten (Access Control Lists) und andere Artefakte von Benutzerrechten, die der Test -perm ignoriert. Dieser Test macht Gebrauch vom Systemaufruf access(2) und kann daher durch NFS-Server getauscht werden, die Abbildung der UID (oder Root-Squashing) nutzen, da viele Systeme access(2) im Kernel des Clients implementieren und daher von den Abbildungsinformationen der UID keinen Gebrauch machen konnen, die auf dem Server gehalten werden. Da dieser Test nur auf dem Ergebnis des Systemaufrufs access(2) basiert, gibt es keine Gewahrleistung, dass eine Datei, bei der dieser Test erfolgreich war, tatsachlich ausgefuhrt werden kann. -false Immer falsch -fstype Typ Die Datei liegt auf einem Dateisystem des Typs Typ. Die gultigen Dateisystemtypen variieren zwischen verschiedenen Versionen von Unix; eine unvollstandige Liste der Dateisystemtypen, die auf einigen Versionen von Unix und anderen akzeptiert werden ist Folgende: ufs, 4.2, 4.3, nfs,tmp, mfs, S51K und S52K. Sie konnen -printf mit der Option %F benutzen, um die Typen Ihrer Dateisysteme zu sehen. -gid n Die numerische Gruppenkennung der Datei ist kleiner als, grosser als oder genau n. -group gname Datei gehort der Gruppe Gruppenname (numerische Gruppenkennungen erlaubt). -ilname Muster wie -lname, aber der Treffer berucksichtigt keine Gross-/Kleinschreibung. Falls die Option -follow in Kraft ist, gibt dieser Test falsch zuruck, ausser wenn der symbolische Link kaputt ist. -iname Muster Funktioniert genauso wie -name ohne jedoch Gross- und Kleinschreibung zu berucksichtigen. Zum Beispiel werden die Muster >>fo*<< und >>F??<< beide die Dateien >>Foo<<, >>FOO<<, >>foo<<, >>fOo<< usw. finden. Das Muster *bar wird auch Dateien wie >>.foobar<< finden. -inum n Die Inode-Nummer der Datei ist kleiner als, grosser als oder genau n. Es ist normalerweise einfacher, stattdessen den Test -samefile zu benutzen. -ipath Muster wie -path, aber der Treffer berucksichtigt keine Gross-/Kleinschreibung -iregex Muster wie -regex, aber der Treffer berucksichtigt keine Gross-/Kleinschreibung -iwholename Muster Siehe -ipath. Diese Alternative ist nicht so portierbar wie -path. -links n Datei hat weniger als, mehr als oder genau n harte Links. -lname Muster Datei ist ein symbolischer Link, dessen Inhalt zum Shell-Muster Muster passt. Insbesondere behandeln die Metazeichen nicht >>/<< oder >>.<<. Falls die Optionen -L oder -follow in Kraft sind, gibt dieser Test falsch zuruck, ausser wenn der symbolische Link kaputt ist. -mmin n Daten der Datei wurden zuletzt vor weniger als, mehr als oder genau n Minuten verandert. -mtime n Daten der Datei wurden zuletzt vor weniger als, mehr als oder genau n*24 Stunden verandert. Lesen Sie die Kommentare zu -atime, um zu verstehen, wie Rundung die Interpretation der Dateianderungszeiten beeinflusst. -name Muster Der Dateiname ohne fuhrende Verzeichnisse (basename) passt zum Shell-Muster Muster. Da die fuhrenden Verzeichnisse entfernt sind, enthalten die fur die Ubereinstimmungsfindung mit -name berucksichtigten Dateinamen niemals einen Schragstrich, daher wird >>-name a/b<< niemals einen Treffer ergeben. Wahrscheinlich werden Sie stattdessen -path benutzen mussen. 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 Anderung in findutils-4.2.2; siehe Abschnitt STANDARDKONFORMITAT unten). Um ein Verzeichnis und die Dateien darin zu ignorieren, benutzen Sie -prune statt jede Datei in dem Baum zu uberprufen; ein Beispiel finden Sie in der Beschreibung dieser Aktion. Klammern werden nicht als etwas Besonderes erkannt, trotz der Tatsache, dass einige Shells einschliesslich der Bash Klammern eine besondere Bedeutung innerhalb von Shell-Mustern beimessen. Der Dateinamensabgleich wird unter Benutzung der Bibliotheksfunktion fnmatch(3) durchgefuhrt. Vergessen Sie nicht, das Muster in Anfuhrungszeichen zu setzen, um es vor Expandierung durch die Shell zu schutzen. -newer Bezug Die Zeit der letzten Datenveranderung der aktuellen Datei ist neuerer als die der letzten Datenveranderung der Bezugsdatei. Falls Bezug ein symbolischer Link ist und die Optionen -H oder -L in Kraft sind, wird immer die Zeit der letzten Datenveranderung 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 wahlbar: a Die Zugriffszeit der Datei Bezug B Die Erstellungszeit der Datei Bezug c Die Inode-Statusanderungszeit von Bezug m Die Anderungszeit der Datei Bezug t Bezug wird direkt als eine Zeit interpretiert Einige Kombinationen sind ungultig. So darf X bespielsweise nicht t sein. Einige Kombinationen sind nicht auf allen Systemen implementiert. B wird beispielsweise nicht von allen Systemen unterstutzt. Falls eine ungultige oder nicht unterstutzte Kombination von XY angegeben wurde, kommt es dadurch zu einem schwerwiegenden Fehler. Zeitangaben werden diesbezuglich wie das Argument zu der Option -d von GNU-date interpretiert. Falls Sie versuchen die Erstellungszeit einer Bezugsdatei zu benutzen und die Erstellungszeit nicht bestimmt werden kann, kommt es dadurch zu einer Nachricht uber einen schwerwiegenden Fehler. Falls Sie einen Test angeben, der sich auf die Erstellungszeit der Dateien bezieht, die untersucht werden, wird dieser Test fur jene Dateien fehlschlagen, deren Erstellungszeit nicht bekannt ist. -nogroup Der numerische Gruppenkennung der Datei entspricht keiner Gruppe. -nouser Die numerische Benutzerkennung der Datei gehort zu keinem Benutzer. -path Muster Der Dateiname passt zum Shell-Muster Muster. Die Metazeichen behandeln >>/<< oder >>.<< nicht besonders; daher wird zum Beispiel find . -path "./sr*sc" Gibt einen Eintrag fur ein Verzeichnis namens ./src/misc (falls es existiert) aus. Um ein gesamtes Verzeichnis zu ignorieren, benutzen Sie -prune, statt jede Datei in dem Baum zu uberprufen. Beachten Sie, dass Mustervergleichstests auf den ganzen Dateinamen angewendet werden, beginnend von einem der auf der Befehlszeile benannten Startpunkte. Es wurde nur Sinn ergeben, hier einen absoluten Pfadnamen zu benutzen, wenn der massgebliche Startpunkt auch ein absoluter Pfad ware. 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 Schragstrich endet, werden -path-Argumente mit einem solchen Schragstrich am Ende nie als Treffer gewertet (ausser wenn vielleicht ein Startpunkt in der Befehlszeile angegeben wird). -path wird auch von find in HP-UX unterstutzt und ist Teil des Standards POSIX 2008. -perm Modus Die Zugriffsrechte der Datei entsprechen exakt dem Modus (oktal oder symbolisch). Da exakte Ubereinstimmung notig ist, wenn Sie diese Form fur symbolische Modi benutzen mochten, mussen Sie moglicherweise eine eher komplexe Moduszeichenkette angeben. -perm g=w wird beispielsweise nur bei Dateien zutreffen, die den Modus 0020 haben (also einer, bei dem das Schreibrecht der Gruppe das einzige gesetzte Recht ist). Wahrscheinlicher ist, dass Sie die Formen >>/<< oder >>-<< benutzen mochten, zum Beispiel -perm -g=w, was auf jede Datei mit Gruppenschreibrechten passt. Einige anschauliche Beispiele finden Sie im Abschnitt BEISPIELE. -perm -Modus Alle Rechte-Bits Modus sind fur diese Datei gesetzt. Symbolische Modi werden in dieser Form akzeptiert. Dies ist ublicherweise die Art, auf die Sie sie benutzen mochten. Sie mussen >>u<<, >>g<< oder >>o<< angeben, falls Sie einen symbolischen Modus verwenden. Einige anschauliche Beispiele finden Sie im Abschnitt BEISPIELE. -perm /Modus Einige der Rechte-Bits Modus sind fur diese Datei gesetzt. Symbolische Modi werden in dieser Form akzeptiert. Sie mussen >>u<<, >>g<< oder >>o<< angeben, falls Sie einen symbolischen Modus verwenden. Einige anschauliche Beispiele finden Sie im Abschnitt BEISPIELE. Falls keine Rechte-Bits in Modus gesetzt sind, trifft dieser Test auf alle Dateien zu (die Idee, die dahinter steckt, ist das durchgangige Verhalten zu -perm -000). -perm +Modus Dies wird nicht mehr unterstutzt und wurde bereits 2005 als veraltet markiert. Verwenden Sie stattdessen -perm /Modus. -readable trifft auf durch den aktuellen Benutzer lesbare Dateien zu. Dies berucksichtigt Zugriffssteuerungslisten (ACLs) und andere Artefakte von Rechten, die der Test -perm ignoriert. Dieser Test macht Gebrauch vom Systemaufruf access(2) und kann daher durch NFS-Server getauscht werden, die Abbildung der UID (oder Root-Squashing) nutzen, da viele Systeme access(2) im Kernel des Clients implementieren und daher von den Abbildungsinformationen der UID keinen Gebrauch machen konnen, die auf dem Server gehalten werden. -regex Muster der Dateiname passt zu dem regularen Ausdruck Muster. Dies ist ein Treffer auf den gesamten Pfad, keine Suche. Um beispielsweise eine Datei mit dem Namen ./fubar3 zu finden, konnen Sie die regularen Ausdrucke >>.*bar.<< oder >>.*b.*3<< benutzen, aber nicht >>f.*r3<<. Die regularen Ausdrucke, die find versteht, sind standardmassig regulare Ausdrucke von Emacs (ausser dass >>.<< auf Zeilenumbruch passt), dies kann aber mit der Option -regextype geandert werden. -samefile Name Datei bezieht sich auf den gleichen Inode wie Name. Wenn -L in Kraft ist, kann dies symbolische Links umfassen. -size n[cwbkMG] Datei belegt weniger als, mehr als oder genau n Speichereinheiten (aufgerundet). Die folgenden Endungen konnen benutzt werden: >>b<< fur 512-Byte-Blocke (dies ist die Vorgabe, wenn keine Endung benutzt wird) >>c<< fur Byte >>w<< fur Worter aus zwei Byte >>k<< fur Kibibyte (KiB, Einheiten aus 1024 Byte) >>M<< fur Mebibyte (MiB, Einheiten aus 1024 * 1024 = 1048576 Byte) >>G<< fur Gibibyte (GiB, Einheiten aus 1024 * 1024 * 1024 = 1073741824 Byte) Die Grosse ist einfach das Mitglied >>st_size<< der Struktur stat, das von dem Systemaufruf lstat (oder stat) befullt wird. Es wird wie oben beschrieben gerundet. Mit anderen Worten, es ist mit dem Ergebnis des Aufrufs von ls -l konsistent. Vergessen Sie nicht, dass die Formatkennzeichner >>%k<< und >>%b<< von -printf Dateien mit Lochern unterschiedlich handhaben. Die Endung >>b<< bezeichnet stets 512-Byte-Blocke und niemals 1024-Byte-Blocke; dies unterscheidet sich vom Verhalten von -ls. Die Prafixe + und - bezeichnen grosser und kleiner als, wie ublich, d.h. eine exakte Grosse von n Einheiten wird nicht passen. Denken Sie daran, dass die Grosse auf die nachste Einheit aufgerundet wird. Daher ist -size -1M nicht aquivalent zu -size -1048576c. Ersteres passt nur auf leere Dateien, wahrend Letzteres auf Dateien von 0 bis 1.048.575 byte passt. -true immer wahr -type c Datei ist vom Typ c;: b blockorientierte Spezialdatei (gepuffert) c zeichenorientierte Spezialdatei (nicht gepuffert) d Verzeichnis p benannte Pipe (FIFO) f regulare Datei l symbolischer Link; dies ist niemals wahr, falls die Optionen -L oder -follow in Kraft sind, ausser wenn der symbolische Link kaputt ist. Falls Sie nach symbolischen Links suchen mochten, wahrend -L in Kraft ist, benutzen Sie -xtype. s Socket D Door (Solaris) Um nach mehr als einem Typ auf einmal zu suchen, konnen Sie eine kombinierte Liste der Typbuchstaben, getrennt durch ein Komma >>,<<, angeben (GNU-Erweiterung). -uid n Die numerische Benutzerkennung der Datei ist kleiner als, grosser als oder genau n. -used n Auf die Datei ist vor weniger als, mehr als oder genau n Tagen nach ihrer letzten Statusanderung zugegriffen worden. -user Benutzername Die Datei gehort dem Anwender Benutzername (numerische Benutzerkennung erlaubt). -wholename Muster Siehe -path. Diese Alternative ist nicht so portierbar wie -path. -writable passt auf durch den aktuellen Benutzer schreibbare Dateien. Die berucksichtigt Zugriffssteuerungslisten (ACLs) und andere Artefakte von Rechten, die der Test -perm ignoriert. Dieser Test macht Gebrauch vom Systemaufruf access(2) und kann daher durch NFS-Server getauscht werden, die Abbildung der UID (oder Root-Squashing) nutzen, da viele Systeme access(2) im Kernel des Clients implementieren und daher von den Abbildungsinformationen der UID keinen Gebrauch machen konnen, die auf dem Server gehalten werden. -xtype c das Gleiche wie -type, ausser wenn die Datei ein symbolischer Link ist. Fur symbolische Links gilt: Falls die Optionen -H oder -P angegeben wurden, ist dies wahr, wenn die Datei ein Link auf eine Datei des Typs c ist oder, falls die Option -L angegeben wurde, wenn c >>l<< ist. Anders ausgedruckt, fur symbolische Links pruft -xtype den Typ der Datei, den -type nicht pruft. -context Muster (Nur SELinux) Sicherheitskontexte der Datei, die dem Muster entspricht. AKTIONEN -delete Dateien oder Verzeichnisse loschen; wahr, falls erfolgreich entfernt. Falls das Entfernen fehlschlagt, wird eine Fehlermeldung ausgegeben und der Ruckgabewert von find wird ungleich null sein (wenn es letztendlich beendet wird). Warnung: Vergessen Sie nicht, dass find die Befehlszeile als Ausdruck auswertet, so dass find durch ein zuerst gesetztes -delete veranlasst wird, alles unterhalb der von Ihnen angegebenen Startpunkte zu loschen. Wenn Sie die Aktion -delete in der Befehlszeile verwenden, wird automatisch die Option -depth eingeschaltet. Da -depth seinerseits die Option -prune wirkungslos macht, konnen -depth und -prune nicht sinnvoll kombiniert werden. Oft mochte ein Benutzer mit -print eine find-Befehlszeile testen, bevor -delete fur die tatsachliche Entfernung hinzugefugt wird. Um uberraschende Ergebnisse zu vermeiden, ist es ublicherweise das Beste, -depth explizit wahrend dieser fruheren Testlaufe hinzuzufugen. Die Aktion -delete schlagt beim Entfernen eines Verzeichnisses fehl, ausser wenn das Verzeichnis leer ist. Zusammen mit der Option -ignore_readdir_race wird find Fehler der Aktion -delete ignorieren, falls die Datei verschwunden ist, seit das Elternverzeichnis gelesen wurde: es wird keine Fehlerdiagnosen ausgeben, der Exit-Code nicht auf einen von Null verschiedenen Wert gesetzt und der Ruckkehr-Code der Aktion -delete wird wahr sein. -exec Befehl ; fuhrt den Befehl aus; wahr, wenn Status 0 zuruckgegeben wird. Alle folgenden Argumente von find werden als Argumente des Befehls betrachtet, bis ein Argument gefunden wird, das >>;<< beinhaltet. Die Zeichenkette >>{}<< wird uberall, wo sie in den Argumenten erscheint, durch den aktuell verarbeiteten Dateinamen ersetzt, nicht nur in Argumenten, in denen sie allein steht, wie in einigen Versionen von find. Es konnte notig sein, beide Konstruktionen zu maskieren (mit einem >>\<<) oder in Anfuhrungszeichen zu setzen, um sie vor einer Expansion durch die Shell zu schutzen. Im Abschnitt BEISPIELE finden Sie Beispiele, wie Sie die Option -exec benutzen. Der angegebene Befehl wird jeweils fur jede gefundene Datei ausgefuhrt. Der Befehl wird im Startverzeichnis ausgefuhrt. Es gibt unvermeidliche Sicherheitsprobleme rings um den Gebrauch der Aktion -exec; Sie sollten stattdessen die Option -execdir verwenden. -exec Befehl {} + Diese Variante der Aktion -exec fuhrt den angegebenen Befehl fur die ausgewahlten Dateien aus, aber die Befehlszeile wird durch das Anhangen jeder ausgewahlten Datei an das Ende gebildet; die Gesamtzahl der Befehlsaufrufe wird viel geringer sein, als die Anzahl passender Dateien. Die Befehlszeile wird auf die gleiche Weise wie bei xargs gebildet. Innerhalb des Befehls ist nur eine Instanz von >>{}<< erlaubt und sie muss am Ende direkt vor dem >>+<< erscheinen; sie muss (mit einem >>\<<) maskiert oder in Anfuhrungszeichen gesetzt werden, um die Interpretation durch die Shell zu verhindern. Der Befehl wird im Startverzeichnis ausgefuhrt. Falls irgendein Aufruf mit der >>+<<-Form einen von Null verschiedenen Wert als Exit-Status zuruckliefert, dann liefert find einen von Null verschiedenen Exit-Status zuruck. Wenn find einen Fehler entdeckt, kann dies gelegentlich zu einem unmittelbaren Abbruch fuhren, so dass ausstehende Befehle uberhaupt nicht mehr ausgefuhrt werden. Aus diesem Grund fuhrt -exec mein-Befehl {} + -quit nicht dazu, dass mein-Befehl tatsachlich ausgefuhrt wird. Diese Variante von -exec gibt immer >>wahr<< zuruck. -execdir Befehl ; -execdir Befehl {} + wie -exec, aber der angegebene Befehl wird in dem Unterverzeichnis ausgefuhrt, das die passende Datei enthalt, was normalerweise nicht das Verzeichnis ist, in dem Sie find aufgerufen haben. So wie bei -exec sollten die geschweiften Klammern {} auch hier in Anfuhrungszeichen gesetzt werden, wenn find aus einer Shell heraus aufgerufen wird. Dies ist eine wesentlich sicherere Methode zum Aufruf von Befehlen, da sie Race Conditions wahrend der Auflosung von Pfaden zu den passenden Dateien vermeidet. Wie bei der Aktion -exec wird die Form >>+<< von -execdir eine Befehlszeile bilden, um mehr als eine passende Datei zu verarbeiten, aber jeder angegebene Aufruf des Befehls wird nur Dateien auflisten, die im gleichen Unterverzeichnis existieren. Falls Sie diese Option benutzen, mussen Sie sicherstellen, dass Ihre Umgebungsvariable PATH nicht direkt auf >>.<< verweist; andernfalls konnte ein Angreifer Befehle seiner Wahl ausfuhren, indem er eine Datei mit geeignetem Namen in einem Verzeichnis hinterlasst, in dem Sie -execdir ausfuhren werden. Das Gleiche gilt fur die Eintrage in PATH, die leer oder keine absoluten Verzeichnisnamen sind. Falls irgendein Aufruf in der >>+<<-Form einen von Null verschiedenen Wert als Exit-Status zuruckliefert, dann liefert find einen von Null verschiedenen Exit-Status zuruck. Wenn find einen Fehler entdeckt, kann dies gelegentlich zum unmittelbaren Abbruch fuhren, so dass ausstehende Befehle uberhaupt nicht mehr ausgefuhrt werden. Das Ergebnis der Aktion hangt davon ab, welche der Varianten + oder the ; benutzt wird. -execdir Befehl {} + gibt immer >>wahr<< zuruck, wahrend -execdir Befehl {} ; nur dann >>wahr<< ergibt, wenn der Befehl 0 zuruckgibt. -fls Datei wahr; wie -ls, schreibt aber wie -fprint nach Datei. Die Ausgabedatei wird immer erstellt, sogar wenn das Pradikat niemals passte. Lesen Sie den Abschnitt UNUBLICHE DATEINAMEN, zu erfahren, wie unubliche Dateinamen gehandhabt werden. -fprint Datei wahr; gibt den vollstandigen Dateinamen in Datei aus. Falls Datei nicht existiert, wird sie erzeugt; andernfalls wird sie gekurzt. Die Dateinamen /dev/stdout und /dev/stderr werden gesondert gehandhabt; sie beziehen sich auf die Standardausgabe beziehungsweise die Standardfehlerausgabe. Die Ausgabedatei wird immer erstellt, sogar wenn das Pradikat niemals passte. Lesen Sie den Abschnitt UNUBLICHE DATEINAMEN, um zu erfahren, wie unubliche Dateinamen gehandhabt werden. -fprint0 Datei wahr; wie -print0, schreibt aber wie -fprint nach Datei. Die Ausgabedatei wird immer erstellt, sogar, wenn das Pradikat niemals passte. Lesen Sie den Abschnitt UNUBLICHE DATEINAMEN, um zu erfahren, wie unubliche Dateinamen gehandhabt werden. -fprintf Datei Format wahr; wie -printf, schreibt aber wie -fprint nach Datei. Die Ausgabedatei wird immer erstellt, sogar, wenn das Pradikat niemals passte. Lesen Sie den Abschnitt UNUBLICHE DATEINAMEN, um zu erfahren, wie unubliche Dateinamen gehandhabt werden. -ls wahr; listet aktuelle Datei im Format ls -dils auf der Standardausgabe auf. Die Anzahl der Blocke besteht aus 1 kB-Blocken, ausser wenn die Umgebungsvariable POSIXLY_CORRECT gesetzt ist, in der Blocke zu 512 Byte benutzt werden. Lesen Sie den Abschnitt UNUBLICHE DATEINAMEN, um zu erfahren, wie unubliche Dateinamen gehandhabt werden. -ok Befehl ; wie -exec, vorher wird der Anwender aber um Bestatigung gebeten. Falls der Anwender zustimmt, wird der Befehl ausgefuhrt. Andernfalls wird nur falsch zuruckgegeben. Wenn der Befehl ausgefuhrt wird, ist seine Standardeingabe umgeleitet von /dev/null. Diese Aktion darf nicht zusammen mit der Option -files0-from angegeben werden. Die Antwort auf die Abfrage wird mit einem Paar regularer Ausdrucke verglichen, um zu bestimmen, ob es eine positive oder negative Antwort ist. Dieser regulare Ausdruck stammt vom System, falls die Umgebungsvariable POSIXLY_CORRECT gesetzt ist, ansonsten von den Meldungsubersetzungen von find. Falls das System keine geeignete Definition hat, wird die Definition von find selbst benutzt. Auf jeden Fall wird die Interpretation des regularen Ausdrucks von den Umgebungsvariablen LC_CTYPE (Zeichenklassen) und LC_COLLATE (Zeichenbereiche und entsprechende Klassen) beeintrachtigt. -okdir Befehl ; wie -exec, fragt den Anwender aber zuerst auf die gleiche Art wie fur -ok. Falls der Anwender nicht zustimmt, wird nur falsch zuruckgegeben. Wenn der Befehl ausgefuhrt wird, ist seine Standardeingabe umgeleitet von /dev/null. Diese Aktion darf nicht zusammen mit der Option -files0-from angegeben werden. -print wahr; gibt den vollstandigen Dateinamen gefolgt von einem Zeilenvorschub auf der Standardausgabe aus. Falls Sie die Ausgabe von find in ein anderes Programm per Pipe weiterleiten und dort auch nur die geringste Moglichkeit besteht, dass die Dateien, die Sie suchen, einen Zeilenvorschub enthalten, sollten Sie ernsthaft in Betracht ziehen, statt -print -print0 zu verwenden. Lesen Sie den Abschnitt UNUBLICHE DATEINAMEN, um zu erfahren, wie unubliche Dateinamen gehandhabt werden. -print0 wahr; gibt den vollstandigen Dateinamen gefolgt von einem Null-Zeichen (anstelle des Zeilenvorschubs, den -print benutzt) aus. Dies ermoglicht, dass Dateinamen, die Zeilenvorschube oder andere Typen von Leerraumen enthalten, korrekt durch Programme interpretiert werden, die die Ausgabe von find verarbeiten. Diese Option entspricht der Option -0 von xargs. -printf Format wahr; gibt Format auf der Standardausgabe aus und interpretiert dabei >>\<<- und >>%<<-Anweisungen. Feldbreiten und Genauigkeiten konnen wie bei der C-Funktion printf(3) angegeben werden. Bitte beachten Sie, dass viele Felder mit %s statt mit %d ausgegeben werden. Dies kann bedeuten, dass der Schalter nicht wie erwartet funktioniert. Dies bedeutet auch, dass die Option >>-<< nicht funktioniert (er erzwingt, dass Felder linksbundig ausgerichtet werden). Anders als -print fugt -printf keinen Zeilenvorschub an das Ende der Zeichenkette. Die Anweisungen sind: \a Alarmton \b Ruckschritt \c Ausgabe gemass dieser Formatbeschreibung sofort stoppen und die Ausgabe leeren \f Seitenvorschub \n Zeilenumbruch \r Wagenrucklauf \t horizontaler Tabulator \v vertikaler Tabulator \0 ASCII-Nullbyte \\ der Ruckwartsschragstrich selbst (>>\<<) \NNN das Zeichen, dessen ASCII-Code NNN ist (oktal) Ein >>\<<-Zeichen gefolgt von einem anderen Zeichen wird als ein gewohnliches Zeichen betrachtet, daher werden beide ausgegeben. %% das Prozentzeichen selbst %a die Zeit des letzten Zugriffs auf die Datei, zuruckgegeben im Format der C-Funktion ctime(3). %Ak die Zeit des letzten Zugriffs auf die Datei, angegeben durch k. Das ist entweder >>@<< oder eine Anweisung fur die C-Funktion strftime(3). Einige der moglichen Werte fur k sind nachfolgend aufgefuhrt; eine vollstandige Liste finden Sie in der Dokumentation zu strftime(3). Einige davon sind moglicherweise aufgrund von systembedingten Unterschieden in der Bibliotheksfunktion strftime(3) nicht auf allen Systemen verfugbar. @ Sekunden seit dem 1.1.1970, 00:00 Uhr GMT mit Bruchteil Zeitfelder: H Stunde (00..23) I Stunde (01..12) k Stunde ( 0..23) l Stunde ( 1..12) M Minute (00..59) p PM oder AM der Locale r Zeit, 12 Stunden (hh:mm:ss: AM/PM) S Sekunden (00.00 bis 61.00). Es gibt Nachkommastellen. T Zeit, 24 Stunden (hh:mm:ss.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 konnte). Das Sekundenfeld beinhaltet einen Bruchteil. X Zeitdarstellung der Locale (H:M:S). Das Sekundenfeld enthalt einen Bruchanteil. Z Zeitzone (z.B. EDT) oder nichts, falls keine Zeitzone bestimmt werden kann Datumsfelder: a abgekurzter Wochentag der Locale (So bis Sa) A voller Wochentag der Locale, variable Lange (Sonntag bis Samstag) b abgekurzter Monatsname der Locale (Jan bis Dez) B voller Monatsname der Locale in variabler Lange (Januar bis Dezember) c Datum und Zeit der Locale (Sa 4. Nov 12:02:33 EST 1989). Das Format entspricht dem von ctime(3) und wahrt daher die Kompatibilitat mit diesem Format. Es gibt dort keine Nachkommastellen im Sekundenfeld. d Tag des Monats (01 bis 31) D Datum (mm/dd/yy) F Datum (yyyy-mm-dd) h das Gleiche wie b j Tag des Jahres (001..366) m Monat (01..12) U Nummer der Woche im Jahr mit Sonntag als erstem Tag der Woche (00 bis 53) w Tag der Woche (0 bis 6) W Nummer der Woche im Jahr mit Montag als erstem Tag der Woche (00 bis 53) x Datumsdarstellung der Locale (mm/dd/yy) y Die letzten zwei Ziffern des Jahres (00..99) Y Jahr (1970 ) %b der fur diese Datei benutzte Plattenplatz in 512-Byte-Blocken. Da Plattenplatz als Vielfaches der Blockgrosse des Dateisystems reserviert wird, ist dieser ublicherweise grosser als %s/512, er kann aber auch kleiner sein, wenn die Datei eine Datei mit Lochern (Sparse-Datei) ist. %Bk Der Erstellungszeitpunkt der Datei in dem von k angegebenen Format, welches das Gleiche wie fur %A ist. Diese Anweisung liefert eine leere Zeichenkette, falls das darunterliegende Betriebssystem oder Dateisystem keine Erstellungszeitpunkte unterstutzt. %c das Datum, an dem zum letzten Mal der Status der Datei geandert wurde, im Format der C-Funktion ctime(3). %Ck das Datum, an dem zum letzten Mal der Status der Datei geandert wurde, in dem durch k angegebenen Format, was das Gleiche ist, wie fur %A. %d die Tiefe der Datei im Verzeichnisbaum; Null bedeutet, dass die Datei ein Befehlszeilenargument ist. %D die Geratenummer des Gerats auf der die Datei existiert (das Feld >>st_dev<< der Stuktur >>stat<<) als Dezimalzahl %f Gibt den Basisnamen aus. Dies ist der Dateiname ohne vorangestellte Verzeichnisnamen (also nur das letzte Element). Fur / ergibt sich /. Ein Beispiel finden Sie im Abschnitt BEISPIELE. %F Typ des Dateisystems, auf dem die Datei liegt; dieser Wert kann fur -fstype benutzt werden. %g der Name der Gruppe der Datei oder die numerische Gruppenkennung, wenn die Gruppe keinen Namen hat %G die numerische Gruppenkennung der Datei %h Der Verzeichnisname; die voranstehenden Verzeichnisse des Dateinamens (alles ausser dem letzten Element). Falls der Dateiname keine Schragstriche enthalt (da er im aktuellen Verzeichnis ist), wird der Kennzeichner %h zu >>.<< expandiert. Fur Dateien, die selbst Verzeichnisse sind und einen Schragstrich enthalten (/), wird %h zu einer leeren Zeichenkette expandiert. Ein Beispiel finden Sie im Abschnitt BEISPIELE. %H der Startpunkt, unter dem die Datei gefunden wurde %i die Inode-Nummer der Datei (dezimal) %k der fur diese Datei benutzte Plattenplatz in 1 kB-Blocken. Da Plattenplatz als Vielfaches der Blockgrosse des Dateisystems reserviert wird, ist dieser ublicherweise grosser als %s/1024, er kann aber auch kleiner sein, wenn die Datei eine Datei mit Lochern (Sparse-Datei) ist. %l Ziel des symbolischen Links (leere Zeichenkette, falls die Datei kein symbolischer Link ist %m die Zugriffsrechte-Bits der Datei (oktal). Diese Option benutzt die >>traditionellen<< Nummern, die die meisten Unix-Implementierungen benutzen, falls aber Ihre Implementierung eine unubliche Sortierung der oktalen Zugriffsrechte benutzt, werden Sie einen Unterschied zwischen dem tatsachlichen Wert des Datei-Modus und der Ausgabe von %m sehen. Normalerweise mochten Sie eine fuhrende Null vor dieser Zahl haben. Um dies zu erreichen sollten Sie die Markierung # benutzen (wie beispielsweise in >>%#m<<). %M die Zugriffsrechte der Datei (in symbolischer Form, wie fur ls). Diese Anweisung wird von Findutils seit einschliesslich Version 4.2.5 unterstutzt. %n Anzahl harter Links auf die Datei %p Name der Datei %P Name der Datei; ohne den Namen des Startpunkts, unter dem sie gefunden wurde. %s die Grosse der Datei in Byte %S Dichte der Datei. Diese wird berechnet als (BLOCKGROssE*st_blocks / st_size). Der genaue Wert, den Sie fur eine normale Datei einer bestimmten Lange erhalten ist vom System abhangig. Normale Dateien mit Lochern (Sparse-Dateien) werden einen Wert kleiner als 1.0 aufweisen und Dateien, die indirekte Blocke verwenden konnen, einen Wert grosser als 1.0 haben. Im allgemeinen ist die von einer Datei verwandte Anzahl an Blocken dateisystemabhangig. Der Wert, der fur BLOCKGROssE verwendet wird, ist vom System abhangig, betragt aber normalerweise 512 Byte. Falls die Dateigrosse null ist, ist der ausgegebene Wert undefiniert. Auf Systemen, auf denen die Unterstutzung fur st_blocks fehlt, wird als Dichte einer Datei 1.0. angenommen. %t Zeit der letzten Anderung der Datei in dem von der C-Funktion ctime(3) zuruckgegebenen Format %Tk Zeit der letzten Anderung der Datei in dem durch k angegebenen Format, wie bei %A %u Name des Benutzers der Datei oder numerische Benutzerkennung, falls der Benutzer keinen Namen hat. %U numerische Benutzerkennung der Datei. %y Typ der Datei (wie in ls -l), U=unbekannter Typ (sollte nicht auftreten) %Y Typ der Datei (wie %y), folgt aber symbolischen Links: >>L<<=Schleife, >>N<<=nicht existent, >>?<< fur jeden anderen Fehler beim Bestimmen des Typs des Symlink-Ziels. %Z (nur SELinux) Sicherheitskontext der Datei. %{ %[ %( Fur zukunftige 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 konnten). Ein >>%<< am Ende des Formatarguments verursacht unvorhersehbares Verhalten, da es dort kein nachfolgendes Zeichen gibt. In einigen Locales konnte es Ihre Hausturschlussel verstecken, wahrend es in anderen Ihre letzte Seite des Romans, den Sie lesen, entfernt. Die Anweisungen %m und %d unterstutzen die Schalter #, 0 und +, die anderen Anweisungen jedoch nicht, selbst wenn Nummern ausgegeben werden. Numerische Anweisungen, die diese Schalter nicht unterstutzen, beinhalten G, U, b, D, k und n. Der Formatschalter >>-<< wird unterstutzt und andert die Ausrichtung eines Feldes von rechtsbundig (was vorgegeben ist) auf linksbundig. Lesen Sie den Abschnitt UNUBLICHE DATEINAMEN, um zu erfahren, wie unubliche Dateinamen gehandhabt werden. -prune Wahr; falls die Datei ein Verzeichnis ist, wird nicht hinein abgestiegen. Falls -depth angegeben ist, dann hat -prune keine Wirkung. Da -delete -depth impliziert, konnen Sie -prune und -delete nicht sinnvoll zusammen benutzen. Um beispielsweise das Verzeichnis src/emacs und alle Dateien und Verzeichnisse darunter zu uberspringen und die Namen der anderen gefundenen Dateien auszugeben, machen Sie etwas wie Folgendes: find . -path ./src/emacs -prune -o -print -quit Beendet sofort (mit einem Ruckgabewert von 0, falls keine Fehler aufgetreten sind). Dies unterscheidet sich von -prune, da -prune lediglich auf die Inhalte der ignorierten Verzeichnisse angewendet wird, wahrend -quit einfach nur find sofort beendet. Es bleiben keine laufenden Kindprozesse ubrig. Alle mit -exec + or -execdir + erstellten Befehle, die aufgerufen wurden, werden beendet. Nach der Ausfuhrung von -quit werden keine weiteren in der Befehlszeile angegebenen Befehle verarbeitet. Beispielsweise gibt >>find /tmp/foo /tmp/bar -print -quit<< nur >>/tmp/foo<< aus. Ein haufiger Anwendungsfall fur -quit ist, das Durchsuchen des Dateisystems zu beenden, sobald das Gewunschte gefunden wurde. Falls beispielsweise nur eine einzelne Datei gefunden werden soll, konnen Sie Folgendes tun: find / -name Nadel -print -quit OPERATOREN aufgelistet in der Reihenfolge abnehmender Wertigkeit: ( expr ) Wertigkeit erzwingen. Da Klammern fur die Shell etwas spezielles sind, werden Sie sie normalerweise maskieren mussen. Viele Beispiele in dieser Handbuchseite verwenden zu diesem Zweck; >>\( \) anstelle von >>( )<<. ! Ausdruck wahr, wenn der Ausdruck falsch ist. Es wird normalerweise auch notig sein, dieses Zeichen vor einer Interpretation durch die Shell zu schutzen. -not Ausdruck das Gleiche wie ! Ausdruck, ist aber nicht POSIX-konform Ausdruck1 Ausdruck2 Zwei Ausdrucke in einer Reihe werden mit einem impliziten -a verbunden; Ausdruck2 wird nicht ausgewertet, wenn Ausdruck1 falsch ist. Ausdruck1 -a Ausdruck2 entspricht Ausdruck1 Ausdruck2 Ausdruck1 -and Ausdruck2 entspricht Ausdruck1 Ausdruck2, ist aber POSIX-konform Ausdruck1 -o Ausdruck2 oder; Ausdruck2 wird nicht ausgewertet, falls Ausdruck1 wahr ist Ausdruck1 -or Ausdruck2 entspricht Ausdruck1 -o Ausdruck2, ist aber nicht POSIX-konform Ausdruck1, Ausdruck2 Liste; sowohl Ausdruck1 als auch Ausdruck2 werden immer ausgewertet. Der Wert von Ausdruck1 wird verworfen; der Wert der Liste ist der Wert von Ausdruck2. Der Kommaoperator kann nutzlich sein, um nach unterschiedlichen Kriterien zu suchen, die Dateisystemhierarchie aber nur einmal zu durchlaufen. Die Aktion -fprintf kann benutzt werden, um die verschiedenen gefundenen Elemente in mehreren verschiedenen Ausgabedateien aufzulisten. Bitte beachten Sie, das -a, wenn es implizit (zum Beispiel, wenn zwei Tests ohne einen expliziten Operator zwischen ihnen auftauchen) oder explizit angegeben wird, Vorrang vor -o hat. Das bedeutet, dass find . -name afile -o -name bfile -print niemals afile ausgibt. UNUBLICHE DATEINAMEN Viele der Aktionen von find resultieren in der Ausgabe von Daten, die unter der Kontrolle anderer Benutzer stehen. Dies umfasst Dateinamen, Grossen, Anderungszeiten und so weiter. Dateinamen stellen ein potentielles Problem dar, da sie jedes Zeichen mit Ausnahme von >>\0<< und >>/<< enthalten konnen. Unubliche Zeichen in Dateinamen konnen unerwartete und oft unerwunschte Dinge mit Ihrem Terminal tun (beispielsweise die Einstellungen Ihrer Funktionstasten auf einigen Terminals andern). Unubliche Zeichen werden von verschiedenen Aktionen unterschiedlich gehandhabt, wie im Folgenden beschrieben. -print0, -fprint0 immer den genauen Dateinamen unverandert ausgeben, sogar wenn die Ausgabe an ein Terminal geht. -ls, -fls Unubliche Zeichen werden maskiert. Leerzeichen, Ruckwartsschragstrich und doppelte Anfuhrungszeichen werden unter Benutzung von Maskierung im C-Stil ausgegeben (zum Beispiel >>\f<<, >>\<<). Andere unubliche Zeichen werden unter Benutzung von einer oktalen Maskierung ausgegeben. Andere druckbare Zeichen (fur -ls und -fls sind das die Zeichen zwischen oktal 041 und 0176) werden unverandert ausgegeben. -printf, -fprintf Falls die Ausgabe nicht an ein Terminal geht, wird sie unverandert gedruckt. Andernfalls hangt das Ergebnis davon ab, welche Anweisung benutzt wird. Die Anweisungen %D, %F, %g, %G, %H, %Y und %y expandieren die Werte, die nicht unter der Kontrolle des Dateibesitzers stehen und werden daher in der vorliegenden Form gedruckt. Die Anweisungen %a, %b, %c, %d, %i, %k, %m, %M, %n, %s, %t, %u und %U haben Werte, die unter der Kontrolle des Dateibesitzers der Datei stehen, die aber nicht benutzt werden konnen, um beliebige Daten an das Terminal zu senden und daher unverandert gedruckt werden. Die Anweisungen %f, %h, %l, %p und %P werden maskiert. Diese Maskierung wird auf die gleiche Art durchgefuhrt wie fur GNU-ls. Dies ist nicht der gleiche Maskierungsmechanismus wie der, der fur -ls und -fls benutzt wird. Falls Sie die Wahl haben, welches Format fur die Ausgabe benutzt werden soll, ist es normalerweise besser >>\0<< als Endezeichen statt eines Zeilenvorschubs zu verwenden, da Dateinamen Leerzeichen und Zeilenvorschube enthalten konnen. Die Einstellung der Umgebungsvariablen LC_CTYPE wird benutzt, um zu bestimmen, welche Zeichen maskiert werden mussen. -print, -fprint Maskierung wird auf die gleiche Weise wie fur -printf und -fprintf gehandhabt. Falls Sie find in einem Skript benutzen oder in einer Situation sind, in der die gefundenen Dateien beliebige Namen haben konnen, sollten Sie in Betracht ziehen -print0 anstelle von -print benutzen. Die Aktionen -ok und -okdir geben den aktuellen Dateinamen unverandert aus. Dies konnte sich in einem spateren Release andern. STANDARDKONFORMITAT Fur grosstmogliche Konformitat zum POSIX-Standard, sollten Sie die Umgebungsvariable POSIXLY_CORRECT setzen. Die folgenden Optionen sind im POSIX-Standard (IEEE Std 1003.1-2008, 2016 Edition) spezifiziert: -H Diese Option wird unterstutzt. -L Diese Option wird unterstutzt. -name Diese Option wird unterstutzt, aber die POSIX-Konformitat hangt von der POSIX-Konformitat der Bibliotheksfunktion fnmatch(3) des SYstems ab. Ab findutils-4.2.2 werden Shell-Metazeichen (zum Beispiel >>*<<, >>?<< oder >>[]<<) zu einem fuhrenden >>.<< passen, da dies die IEEE-PASC-Interpretation 126 erfordert. Dies ist eine Anderung gegenuber vorherigen Versionen der Findutils. -type unterstutzt. POSIX spezifiziert >>b<<, >>c<<, >>d<<, >>l<<, >>p<<, >>f<< und >>s<<. GNU-Find unterstutzt ausserdem >>D<<, das eine Door (Spezialdatei fur Prozesskommunikation) reprasentiert, wo diese vom Betriebsystem bereitgestellt wird. Desweiteren erlaubt GNU find die Angabe mehrfacher Typen auf einmal in einer Kommata-getrennten Liste. -ok unterstutzt. Die Interpretation der Antwort entspricht den >>ja<<- und >>nein<<-Mustern, die durch Setzen der Umgebungsvariablen LC_MESSAGES ausgewahlt wurde. Wenn die Umgebungsvariable POSIXLY_CORRECT gesetzt ist, werden diese Muster als die Systemdefinition einer positiven (ja) oder negativen (nein) Anwort betrachtet. Lesen Sie die Dokumentation des Systems fur nl_langinfo(3), insbesondere YESEXPR und NOEXPR. Wenn POSIXLY_CORRECT nicht gesetzt ist, werden die Muster von finds eigenem Meldungskatalog genommen. -newer unterstutzt. Falls die angegebene Datei ein symbolischer Link ist, wird er immer zuruckverfolgt. Dies ist eine Anderung gegenuber dem bisherigen Verhalten, das benutzt wurde, um die massgebliche Zeit vom symbolischen Link zu nehmen; siehe den Abschnitt GESCHICHTE unterhalb. -perm unterstutzt. Falls die Umgebungsvariable POSIXLY_CORRECT nicht gesetzt ist, werden einige Modusargumente (zum Beispiel +a+x) unterstutzt, die in POSIX nicht gultig sind, um abwartskompatibel zu sein. Andere Primarausdrucke Die Primarausdrucke -atime, -ctime, -depth, -exec, -group, -links, -mtime, -nogroup, -nouser, -ok, -path, -print, -prune, -size, -user und -xdev werden alle unterstutzt. Der POSIX-Standard spezifiziert Klammern >>(<<, >>)<<, Verneinung >>!<< und die Operatoren >>AND<< und >>OR<< (-a und -o). Alle anderen Operationen, Pradikate, Ausdrucke und so weiter sind Erweiterungen jenseits des POSIX-Standards. Viele dieser Erweiterungen sind jedoch nicht auf GNU-Find beschrankt. Der POSIX-Standard erfordert, dass find Schleifen entdeckt: Das Hilfswerkzeug find muss unendliche Schleifen entdecken, also das Eintreten in ein bereits vorher besuchtes Verzeichns, das ein Vorganger der zuletzt gefundenen Datei ist. Wenn es eine Endlosschleife entdeckt, soll Find eine Diagnosenachricht auf die Standardfehlerausgabe schreiben und entweder seine Position in der Hierarchie wiederherstellen oder sich beenden. GNU-find erfullt diese Anforderungen. Die Link-Anzahl von Verzeichnissen, die Eintrage mit harten Links auf einen Vorganger enthalten, werden oft kleiner sein, als sie andernfalls sein sollten. Dies kann bedeuten, dass GNU-Find manchmal den Besuch eines Unterverzeichnisses wegoptimiert, das tatsachlich ein Link zu einem Vorganger ist. Da find nicht tatsachlich in ein solches Unterverzeichnis eintritt, ist es erlaubt, das Ausgeben einer Diagnosenachricht zu verhindern. Dieses Verhalten konnte jedoch ein wenig verwirrend sein. Es ist unwahrscheinlich, dass sich tatsachlich jemand auf dieses Verhalten verlasst. Falls die Leaf-Optimierung mit -noleaf ausgeschaltet wurde, wird der Verzeichniseintrag immer untersucht und die Diagnosenachricht wird an geeigneter Stelle ausgegeben. Symbolische Links konnen nicht benutzt werden, um Dateisystemzyklen im eigentlichen Sinn zu erzeugen, aber falls die Optionen -L oder -follow benutzt werden, wird eine Diagnosenachricht ausgegeben, wenn find in symbolischen Links auf eine Schleife trifft. Wie bei harten Links, die Schleifen enthalten, wird die Leaf-Optimierung oft bedeuten, dass find weiss, dass es stat() oder chdir() bei einem symbolischen Link nicht aufrufen muss, daher ist diese Diagnose haufig nicht notig. Die Option -d wird unterstutzt, um die Kompatibilitat mit verschiedenen BSD-Systemen zu wahren, Sie sollten aber stattdessen die POSIX-konforme Option -depth benutzen. Die Umgebungsvariable POSIXLY_CORRECT beeinflusst nicht das Verhalten der Tests -regex oder -iregex, da diese Tests nicht im POSIX-Standard spezifiziert sind. UMGEBUNGSVARIABLEN LANG Stellt einen Vorgabewert fur die Internationalisierungsvariablen bereit, die nicht gesetzt oder null sind. LC_ALL Falls dies auf einen nicht leeren Zeichenkettenwert gesetzt ist, uberschreibt es die Werte aller anderen Internationalisierungsvariablen. LC_COLLATE Der POSIX-Standard spezifiziert, dass diese Variable die Mustersuche beeinflusst, die bei der Option -name benutzt wird. GNU-Find benutzt die Bibliotheksfunktion fnmatch(3) und unterstutzt daher LC_COLLATE in Abhangigkeitt von der Systembibliothek. Diese Variable beeinflusst ausserdem die Interpretation der Antwort auf -ok, wahrend die Variable LC_MESSAGES das Muster auswahlt, das tatsachlich benutzt wird, um die Antwort auf -ok zu interpretieren, wird die Interpretation jeglicher Ausdrucke mit Klammern im Muster durch LC_COLLATE beeinflusst. LC_CTYPE Diese Variable beeinflusst die Behandlung von Zeichenklassen, die in regularen Ausdrucken ebenso wie im Test -name benutzt wird, falls die Bibliotheksfunktion fnmatch(3) des Systems dies unterstutzt. Diese Variable beeinflusst ausserdem die Interpretation jeglicher Zeichenklassen, die in regularen Ausdrucken benutzt werden, um die Antwort auf die durch -ok angegebene Abfrage zu interpretieren. Die Umgebungsvariable LC_CTYPE wird ausserdem beeinflussen, welche Zeichen als nicht abdruckbar betrachtet werden, wenn Dateinamen ausgegeben werden; siehe den Abschnitt UNUBLICHE DATENAMEN. LC_MESSAGES bestimmt die Locale, die fur internationalisierte Meldungen verwendet werden soll. Falls die Umgebungsvariable POSIXLY_CORRECT gesetzt ist, bestimmt dies ausserdem die Interpretation der Antwort auf die durch die Aktion -ok angegebene Abfrage. NLSPATH bestimmt den Speicherort der Internationalisierungs-Meldungskataloge. PATH beeinflusst die Verzeichnisse, die durchsucht werden, um die ausfuhrbaren Dateien zu finden, die durch -exec, -execdir, -ok und -okdir aufgerufen werden. POSIXLY_CORRECT bestimmt die von -ls und -fls benutzte Blockgrosse, Falls POSIXLY_CORRECT gesetzt ist, sind Blocke Einheiten von 512 Byte. Andernfalls sind es Einheiten von 1024 Byte. Das Setzen dieser Variable schaltet ausserdem standardmassig Warnmeldungen aus (sprich, es impliziert -nowarn), da POSIX erfordert, dass unabhangig von der Ausgabe von -ok alle Meldungen auf der Standardfehlerausgabe Diagnosen sind und in einem Ruckgabewert ungleich null resultieren mussen. Wenn POSIXLY_CORRECT nicht gesetzt ist, wird -perm +zzz nur wie -perm /zzz betrachtet, falls +zzz kein gultiger symbolischer Modus ist. Wenn POSIXLY_CORRECT gesetzt ist, werden solche Konstruktionen als Fehler betrachtet. Wenn POSIXLY_CORRECT gesetzt ist, hangt die Interpretation der Antwort auf die, durch die Aktion -ok angegebene Abfrage, von den Meldungskatalogen des Systems ab, im Gegensatz zur Beachtung der eigenen Meldungsubersetzungen von find. TZ beeinflusst die Zeitzone, die fur einige zeitbezogene Formatanweisungen von -printf und -fprintf benutzt wird. BEISPIELE Einfacher Ansatz mit >>find|xargs<< o Dateien mit dem Namen core in oder unterhalb des Verzeichnisses /tmp suchen und diese loschen. $ find /tmp -name core -type f -print | xargs /bin/rm -f Beachten Sie, dass dies nicht korrekt funktioniert, falls die Dateinamen Zeilenvorschube, einfache oder doppelte Anfuhrungszeichen oder Leerzeichen enthalten. Sicherer Ansatz mit >>find -print0 | xargs -0<< o sucht Dateien mit dem Namen core in oder unterhalb des Verzeichnisses /tmp und loscht diese. Verarbeitet Dateinamen auf eine Weise, in der Datei- oder Verzeichnisnamen, die Dateinamen einfache oder doppelte Anfuhrungszeichen, Leerzeichen oder Zeilenvorschube enthalten, korrekt gehandhabt werden. $ find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f Der Test -name kommt in der Reihenfolge vor dem Test -type, um zu verhindern, dass stat(2) fur jede Datei aufgerufen wird. Beachten Sie, dass es immer noch einen Wettlauf zwischen der Zeit, die find zum Durchsuchen des Dateisystems und der Ausgabe der passenden Dateinamen einerseits und der Zeit, die der von xargs aufgerufene Prozess fur die Arbeit mit der Datei braucht, gibt. Verarbeiten willkurlicher Startpunkte o Nehmen wir an, dass ein fiktives Programm namens proggy eine sehr lange, durch Nullbytes getrennte Dateiliste vorfiltert und erzeugt, diese als Startpunkte verarbeitet und alle regularen leeren Dateien darin sucht: $ proggy | find -files0-from - -maxdepth 0 -type f -empty Durch `-files0-from -` werden die Namen der Startpunkte aus der Standardeingabe gelesen, das heisst, aus der Pipe. Hierbei stellt -maxdepth 0 sicher, dass Eintrage ausdrucklich ohne Absteigen in Unterverzeichnisse ausgewertet werden (falls einer der Startpunkte ein Verzeichnis ist). Ausfuhren eines Befehls fur jede Datei o Den Befehl file fur jede Datei in oder unterhalb des aktuellen Verzeichnisses ausfuhren. $ find . -type f -exec file '{}' \; Beachten Sie, dass Klammern in einfache Anfuhrungszeichen eingeschlossen werden, um sie vor einer Interpretation als Shell-Skript-Zeichensetzung zu schutzen. Der Strichpunkt wird gleichermassen durch die Benutzung des Ruckwartsschragstrichs geschutzt, da einfache Anfuhrungszeichen in diesem Fall ebenfalls benutzt werden konnten. In vielen Fallen konnten Sie die Syntax >>-exec +<< oder besser noch >>-execdir +<< aus Leistungs- und Sicherheitsgrunden bevorzugen. Einmaliges Durchlaufen des Dateisystems - fur 2 verschiedene Aktionen o das Dateisystem nur einmal durchlaufen, set-user-ID-Dateien und Verzeichnisse in /root/suid.txt und grosse Dateien in /root/big.txt auflisten. $ find / \ \( -perm -4000 -fprintf /root/suid.txt '%#m %u %p\n' \) , \ \( -size +100M -fprintf /root/big.txt '%-10s %p\n' \) Dieses Beispiel verwendet das Zeilenfortfuhrungszeichen >>\<< auf den ersten zwei Zeilen, um die Shell anzuweisen, mit dem Einlesen des Befehls auf der nachsten Zeile fortzufahren. Dateisuche anhand des Alters o Nach Dateien in Ihrem Home-Verzeichnis suchen, die in den letzten 24 Stunden geandert wurden. $ find $HOME -mtime 0 Dieser Befehl funktioniert auf diese Art, weil die Zeit, seit jede Datei zuletzt verandert wurde, durch 24 Stunden geteilt und der Rest verworfen wird. Dies bedeutet, dass eine Datei, um -mtime 0 zu entsprechen, eine Veranderung in der Vergangenheit haben muss, die weniger als 24 Stunden zuruckliegt. Dateisuche anhand der Zugriffsrechte o sucht Dateien, die ausfuhrbar, aber nicht lesbar sind $ find /sbin /usr/sbin -executable \! -readable -print o Nach Dateien suchen, die Lese- und Schreibrechte fur ihren Benutzer und ihre Gruppe haben, aber von anderen Benutzern gelesen, aber nicht geschrieben werden konnen. $ find . -perm 664 Dateien, die diesem Kriterium entsprechen, aber andere Rechte-Bits gesetzt haben (zum Beispiel, wenn jemand die Datei ausfuhren kann), werden nicht passen. o Nach Dateien suchen, die Lese- und Schreibrechte fur ihren Benutzer und ihre Gruppe haben und die von anderen Benutzern gelesen werden konnen, ohne das Vorhandensein irgendwelcher zusatzlicher Rechte-Bits (zum Beispiel des Bits fur Ausfuhrbarkeit) zu betrachten. $ find . -perm -664 Dies wird beispielsweise auf eine Datei mit dem Modus 0777 passen. o sucht nach Dateien, die fur irgendjemanden schreibbar sind (ihren Besitzer, ihre Gruppe oder irgendjemand anderes). $ find . -perm /222 o Nach Dateien suchen, die fur ihren Besitzer oder ihre Gruppe schreibbar sind. $ find . -perm /220 $ find . -perm /u+w,g+w $ find . -perm /u=w,g=w Diese drei Befehle tun alle dasselbe, aber der Erste benutzt die oktale Darstellung des Dateimodus und die beiden anderen benutzen die symbolische Form. Die Dateien mussen nicht sowohl fur Besitzer und Gruppe schreibbar sein, um zu passen; eines genugt. o Nach Dateien suchen, die fur ihren Besitzer oder ihre Gruppe schreibbar sind. $ find . -perm -220 $ find . -perm -g+w,u+w Beide Befehle fuhren das Gleiche aus. o Eine ausgeklugeltere Suche nach Berechtigungen. $ find . -perm -444 -perm /222 \! -perm /111 $ find . -perm -a+r -perm /a+w \! -perm /a+x Diese beiden Befehle suchen nach Dateien, die fur jedermann lesbar sind (-perm -444 oder -perm -a+r), mindestens ein gesetztes Schreib-Bit haben (-perm /222 oder -perm /a+w), aber fur niemanden ausfuhrbar sind (! -perm /111 beziehungsweise ! -perm /a+x). >>Pruning<< - Dateien und Verzeichnisse auslassen o Dieser Befehl kopiert den Inhalt aus dem /Quellverzeichnis in das /Zielverzeichnis, lasst aber Dateien und Verzeichnisse mit Namen .snapshot aus (und alles, was sich darin befindet). Er lasst ausserdem alle Dateien und Verzeichnisse aus, deren Name auf ~ endet, nicht jedoch ihren Inhalt. $ cd /Quellverzeichnis $ find . -name .snapshot -prune -o \( \! -name '*~' -print0 \) \ | cpio -pmd0 /dest-dir Die Konstruktion -prune -o \( -print0 \) ist ziemlich gebrauchlich. Die Idee besteht hier darin, dass der Ausdruck vor -prune auf die Dinge passt, die gekurzt werden. Die Aktion -prune selbst gibt jedoch wahr zuruck, daher stellt das folgende -o sicher, dass die rechte Seite nur fur die Verzeichnisse ausgewertet wird, die nicht gekurzt wurden (der Inhalt der gekurzten Verzeichnisse wird nicht einmal besucht und ist daher irrelevant). Der Ausdruck auf der rechten Seite von -o ist nur der Ubersichtlichkeit halber in Klammern. Dies hebt hervor, dass die Aktion -print0 nur den Platz von Dingen einnimmt, auf die -prune nicht angewandt wurde. Da die Standardbedingung >>and<< zwischen Tests fester verbindet als -o, ist dies sowieso die Vorgabe, aber die Klammern helfen zu zeigen, was passiert. o Beim folgenden gegebenen Verzeichnis mit Projekten und den damit verbundenen Versionsverwaltungsverzeichnissen wird eine effiziente Suche nach den Wurzeln der Projekte durchgefuhrt: $ find repo/ \ \( -exec test -d '{}/.svn' \; \ -or -exec test -d '{}/.git' \; \ -or -exec test -d '{}/CVS' \; \ \) -print -prune Beispielausgabe: repo/project1/CVS repo/gnu/project2/.svn repo/gnu/project3/.svn repo/gnu/project3/src/.svn repo/project4/.git In diesem Beispiel verhindert -prune unnotiges Absteigen in Verzeichnisse, die bereits entdeckt wurden (zum Beispiel wird project3/src nicht durchsucht, da es bereits in project3/.svn gefunden wurde), aber es stellt sicher, dass Geschwisterverzeichnisse (project2 und project3) gefunden werden. Weitere nutzliche Beispiele o Nach verschiedenen Dateitypen suchen $ find /tmp -type f,d,l sucht nach Dateien, Verzeichnissen und symbolischen Links im Verzeichnis /tmp. Dabei werden die Typen als Komma-separierte Liste ubergeben (GNU-Erweiterung), was ansonsten aquivalent zu dem folgenden langeren, portableren Ausdruck ist: $ find /tmp \( -type f -o -type d -o -type l \) o Nach Dateien mit dem Namen Nadel suchen und sofort anhalten, wenn der erste Treffer gefunden wird: $ find / -name Nadel -print -quit o Darstellung, wie die Formatanweisungen %f und %h fur die -printf-Aktion in einigen Grenzfallen interpretiert wird. Hier ist ein Beispiel, das auch einige Ausgaben enthalt. $ find . .. / /tmp /tmp/TRACE compile compile/64/tests/find -maxdepth 0 -printf '[%h][%f]\n' [.][.] [.][..] [][/] [][tmp] [/tmp][TRACE] [.][compile] [compile/64/tests][find] EXIT-STATUS find endet mit Status Null, falls alle Dateien erfolgreich verarbeitet wurden und grosser als Null, falls ein Fehler aufgetreten ist. Dies ist absichtlich eine sehr weitgehende Beschreibung, aber falls der Ruckgabewert ungleich Null ist, sollten Sie sich nicht auf die Richtigkeit des Ergebnisses von find verlassen. Wenn ein Fehler auftritt, stoppt find unmittelbar, ohne alle angegebenen Aktionen abzuschliessen. Zum Beispiel werden einige der Startpunkte nicht untersucht oder einige ausstehenden Programmaufrufe fur -exec {} + oder -execdir {} + werden nicht ausgefuhrt. GESCHICHTE Ab findutils-4.2.2 stimmen Shell-Metazeichen (>>*<<, >>?<< oder >>[]<< zum Beispiel), die in Mustern fur Dateinamen verwendet werden, mit einem fuhrenden >>.<< uberein, da die Interpretation 126 von IEEE POSIX dies erfordert. Ab findutils-4.3.3 passt -perm /000 nun auf alle Dateien statt auf keine. Zeitstempel in Nanosekundenauflosung wurden in findutils-4.3.3 implementiert. Ab findutils-4.3.11 setzt die Aktion -delete den Ruckgabewert von find auf einen Wert ungleich null, wenn sie fehlschlagt. find wird jedoch nicht sofort beendet. Vorher wurde der Ruckgabewert von find nicht durch ein Scheitern von -delete beeinflusst. Funktion Hinzugefugt in Erscheint auch in -files0-from 4.9.0 -newerXY 4.3.3 BSD -D 4.3.1 -O 4.3.1 -readable 4.3.0 -writable 4.3.0 -executable 4.3.0 -regextype 4.2.24 -exec + 4.2.12 POSIX -execdir 4.2.12 BSD -okdir 4.2.12 -samefile 4.2.11 -H 4.2.5 POSIX -L 4.2.5 POSIX -P 4.2.5 BSD -delete 4.2.3 -quit 4.2.3 -d 4.2.3 BSD -wholename 4.2.0 -iwholename 4.2.0 -ignore_readdir_race 4.2.0 -fls 4.0 -ilname 3.8 -iname 3.8 -ipath 3.8 -iregex 3.8 Die Syntax -perm +MODE wurde in findutils-4.5.12 zugunsten von -perm /MODUS entfernt. Die Syntax +MODE wurde als veraltet markiert, da findutils-4.2.21 bereits im Jahre 2005 veroffentlicht wurde. KEINE FEHLER Uberraschungen bei Operatorenvorrangsregeln Der Befehl find . -name afile -o -name bfile -print gibt niemals afile aus, da der Befehl tatsachlich aquivalent zu find . -name afile -o \( -name bfile -a -print \) ist. Denken Sie daran, dass -a Vorrang vor -o hat und dass, sofern kein Operator zwischen den Tests angegeben ist, -a angenommen wird. Fehlermeldungen "Der Pfad muss vor dem Ausdruck stehenq $ find . -name *.c -print find: Der Pfad muss vor dem Ausdruck stehen find: Mogliches nichtgeschutztes Muster nach dem Pradikaten >>-name< Melden Sie Fehler in der Ubersetzung an das deutschsprachige Team beim GNU Translation Project . Melden Sie alle anderen Fehler uber das Formular im Fehlererfassungssystem bei GNU Savannah: Allgemeine Themen zum GNU-Findutils-Paket werden in der Mailingliste bug-findutils diskutiert: COPYRIGHT Copyright (C) 1990-2022 Free Software Foundation, Inc. Lizenz GPLv3+: GNU GPL Version 3 oder neuer. Dies ist freie Software: Sie konnen sie verandern und weitergeben. Es gibt KEINE GARANTIE, soweit gesetzlich zulassig. SIEHE AUCH chmod(1), locate(1), ls(1), updatedb(1), xargs(1), lstat(2), stat(2), ctime(3) fnmatch(3), printf(3), strftime(3), locatedb(5), regex(7) Die vollstandige Dokumentation ist auf oder lokal via: info find UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Chris Leick , Mario Blattermann , Dr. Tobias Quathamer und Helge Kreutzmann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . FIND(1)