Find/Anwendungen: Unterschied zwischen den Versionen
(21 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 7: | Zeile 7: | ||
=== Suchbereich === | === Suchbereich === | ||
==== Startverzeichnis | ==== Startverzeichnis ==== | ||
Suche alle Dateien und Verzeichnisse im übergeordneten Verzeichnis | Suche alle Dateien und Verzeichnisse im übergeordneten Verzeichnis | ||
$ '''find ../''' | $ '''find ../''' | ||
Zeile 29: | Zeile 29: | ||
Was aber, wenn Sie nur sehen wollen, ob es JavaScript-Dateien im obersten Verzeichnis gibt? | Was aber, wenn Sie nur sehen wollen, ob es JavaScript-Dateien im obersten Verzeichnis gibt? | ||
* Das können Sie mit '''-maxdepth''' einschränken: find wordpress -maxdepth 1 -name '*js' | * Das können Sie mit '''-maxdepth''' einschränken: find wordpress -maxdepth 1 -name '*js' | ||
* Damit wird nur das '''wordpress'''-Verzeichnis durchsucht, nicht aber die Unterverzeichnisse | * Damit wird nur das '''wordpress'''-Verzeichnis durchsucht, nicht aber die Unterverzeichnisse | ||
* Eine Änderung von '''-maxdepth''' auf 2 würde Unterverzeichnisse im wordpress-Verzeichnis durchsuchen, aber deren Unterverzeichnisse ausschließen | * Eine Änderung von '''-maxdepth''' auf 2 würde Unterverzeichnisse im wordpress-Verzeichnis durchsuchen, aber deren Unterverzeichnisse ausschließen | ||
$ '''find -maxdepth 3''' | $ '''find -maxdepth 3''' | ||
steigt bei der Suche nur 3 Verzeichnisebenen herab | steigt bei der Suche nur 3 Verzeichnisebenen herab | ||
; -depth | ; -depth | ||
bearbeitet den Inhalt jedes Verzeichnisses vor dem Verzeichnis selbst | bearbeitet den Inhalt jedes Verzeichnisses vor dem Verzeichnis selbst | ||
; | ; -maxdepth Ebenen | ||
steigt bis zu der gegebenen Zahl von Ebenen im Verzeichnisbaum auf (in der Hierarchie ab); bei 0 Ebenen werden die Tests nur auf die in der Kommandozeile übergebenen Dateien und Verzeichnisnamen angewandt | steigt bis zu der gegebenen Zahl von Ebenen im Verzeichnisbaum auf (in der Hierarchie ab); bei 0 Ebenen werden die Tests nur auf die in der Kommandozeile übergebenen Dateien und Verzeichnisnamen angewandt | ||
; | ; -maxdepth <n> | ||
Suche nach Dateien, die sich maximal n Verzeichnisebenen unter dem angegebenen Verzeichnis befinden | Suche nach Dateien, die sich maximal n Verzeichnisebenen unter dem angegebenen Verzeichnis befinden | ||
; | ; -mindepth Ebenen | ||
steigt mindestens die gegebene Zahl von Ebenen im Verzeichnisbaum auf (in der Hierarchie ab); bei einer Ebene werden die in der Kommandozeile genannten Dateien und Verzeichnisnamen nicht bearbeitet | steigt mindestens die gegebene Zahl von Ebenen im Verzeichnisbaum auf (in der Hierarchie ab); bei einer Ebene werden die in der Kommandozeile genannten Dateien und Verzeichnisnamen nicht bearbeitet | ||
; | ; -mindepth <n> | ||
Gehe mindestens <n> Verzeichnisebenen unter das angegebene Verzeichnis zurück, bevor die Suche gestartet wird | Gehe mindestens <n> Verzeichnisebenen unter das angegebene Verzeichnis zurück, bevor die Suche gestartet wird | ||
; Verzeichnisse ausschließen | |||
[[#Verzeichnisse ausschließen|Verzeichnisse ausschließen]] | |||
====Symbolische Links ==== | ====Symbolische Links ==== | ||
Die Optionen -H, -L und -P bestimmen den Umgang mit symbolischen Links | Die Optionen -H, -L und -P bestimmen den Umgang mit symbolischen Links | ||
* Darauf folgende Kommandozeilenparamter müssen die Datei- oder Verzeichnisnamen sein, die untersucht werden sollen | * Darauf folgende Kommandozeilenparamter müssen die Datei- oder Verzeichnisnamen sein, die untersucht werden sollen | ||
* Das erste Argument, das mit einem -, einer Klammer (, ), einem Komma , oder einem Ausrufezeichen ! beginnt, wird als Anfang eines Ausdrucks interpretiert, der bestimmt, wonach gesucht wird | * Das erste Argument, das mit einem -, einer Klammer (, ), einem Komma , oder einem Ausrufezeichen ! beginnt, wird als Anfang eines Ausdrucks interpretiert, der bestimmt, wonach gesucht wird | ||
* Alle Argumente davor werden als Verzeichnisnamen angesehen | * Alle Argumente davor werden als Verzeichnisnamen angesehen | ||
* Wenn kein Verzeichnis angegeben ist, wird das aktuelle Verzeichnis genommen | * Wenn kein Verzeichnis angegeben ist, wird das aktuelle Verzeichnis genommen | ||
* Wenn keine Aktion angegeben ist, wird die Aktion -print ausgeführt (es wird stattdessen empfohlen -print0 zu verwenden) | * Wenn keine Aktion angegeben ist, wird die Aktion -print ausgeführt (es wird stattdessen empfohlen -print0 zu verwenden) | ||
; | ; -P | ||
Keinen symbolischen Links folgen | Keinen symbolischen Links folgen | ||
* Dies ist das Standardverhalten | * Dies ist das Standardverhalten | ||
* Wenn find eine Datei untersucht oder Informationen über diese ausgibt, und die Datei ein symbolischer Link ist, dann werden die Informationen von dem symbolischen Link selbst verwendet | * Wenn find eine Datei untersucht oder Informationen über diese ausgibt, und die Datei ein symbolischer Link ist, dann werden die Informationen von dem symbolischen Link selbst verwendet | ||
; | ; -L | ||
Symbolischen Links folgen | Symbolischen Links folgen | ||
* Wenn find eine Datei untersucht oder Informationen über diese ausgibt, dann werden die Informationen von der Datei verwendet, auf die der symbolische Link verweist (es sei denn, der Link ist kaputt oder find nicht in der Lage ist, die Datei zu untersuchen, auf die der Link zeigt) | * Wenn find eine Datei untersucht oder Informationen über diese ausgibt, dann werden die Informationen von der Datei verwendet, auf die der symbolische Link verweist (es sei denn, der Link ist kaputt oder find nicht in der Lage ist, die Datei zu untersuchen, auf die der Link zeigt) | ||
* Die Verwendung dieser Option impliziert die Option -noleaf | * Die Verwendung dieser Option impliziert die Option -noleaf | ||
* Wenn Sie später die Option -P verwenden, wird -noleaf immer noch Auswirkungen zeigen | * Wenn Sie später die Option -P verwenden, wird -noleaf immer noch Auswirkungen zeigen | ||
* Wenn -L aktiv ist und find einen symbolischen Link zu einem Unterverzeichnis während seiner Suche findet, wird das Unterverzeichnis durchsucht, auf das der symbolische Link zeigt | * Wenn -L aktiv ist und find einen symbolischen Link zu einem Unterverzeichnis während seiner Suche findet, wird das Unterverzeichnis durchsucht, auf das der symbolische Link zeigt | ||
* Wenn die Option -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) | * Wenn die Option -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 logisch falsch zurückliefern | * Die Verwendung von -L bewirkt, dass die Prädikate -lname und -ilname immer logisch falsch zurückliefern | ||
; | ; -H | ||
Keinen symbolischen Links folgen, es sei denn …* ...die Parameter in der Kommandozeile werden ausgewertet | Keinen symbolischen Links folgen, es sei denn …* ...die Parameter in der Kommandozeile werden ausgewertet | ||
* Wenn find Dateien auswertet oder Informationen über diese ausgibt, werden die verwendeten Informationen vom symbolischen Link selbst benutzt werden | * Wenn find Dateien auswertet oder Informationen über diese ausgibt, werden die verwendeten Informationen vom symbolischen Link selbst benutzt werden | ||
* Die einzige Ausnahme dieses Verhaltens ist, wenn eine in der Kommandozeile angegebene Datei ein symbolischer Link ist und dem Link gefolgt werden kann | * Die einzige Ausnahme dieses Verhaltens ist, wenn eine in der Kommandozeile 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 | * In dieser Situation werden die Informationen der Datei genommen, auf die der symbolische Link verweist | ||
* Die Informationen über den Link selbst dienen als Fall-Back für den Fall, dass die Datei, auf die der Link zeigt, nicht untersucht werden kann | * Die Informationen über den Link selbst dienen als Fall-Back für den Fall, dass die Datei, auf die der Link zeigt, nicht untersucht werden kann | ||
* Wenn -H aktiv ist und einer der Pfade in der Kommandozeile ein symbolischer Link zu einem Verzeichnis ist, werden die Inhalte dieses Verzeichnisses untersucht (wobei natürlich -maxdepth 0 das verhindern kann) | * Wenn -H aktiv ist und einer der Pfade in der Kommandozeile ein symbolischer Link zu einem Verzeichnis ist, werden die Inhalte dieses Verzeichnisses untersucht (wobei natürlich -maxdepth 0 das verhindern kann) | ||
; | ; -follow | ||
Veraltet | Veraltet | ||
* Verwenden Sie die Option -L stattdessen | * Verwenden Sie die Option -L stattdessen | ||
* Dereferenziert symbolische Links | * Dereferenziert symbolische Links | ||
* Impliziert -noleaf | * Impliziert -noleaf | ||
* Wenn die Option -H oder -L nicht angegeben wird, ändert die Position von -follow das Verhalten des Prädikats -newer | * 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 aufgeszählt sind, werden dereferenziert, wenn es sich bei ihnen um symbolische Links handelt | * Alle Dateien, die als Argumente von -newer aufgeszählt sind, werden dereferenziert, wenn es sich bei ihnen um symbolische Links handelt | ||
* Das gleiche gilt für -anewer und -cnewer | * Das gleiche gilt für -anewer und -cnewer | ||
* Genauso wird das Prädikat -type immer auf den Typ der Datei angewandt, auf den der symbolische Link zeigt und nicht auf den Link selbst | * Genauso 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 logisch falsch zurückliefern | * Die Verwendung von -follow hat zur Folge, dass die Prädikate -lname und -ilname immer logisch falsch zurückliefern | ||
==== Dateisysteme ==== | ==== Dateisysteme ==== | ||
; | ; -xdev | ||
durchsucht keine Verzeichnisse in anderen Dateisystemen/Partitionen | durchsucht keine Verzeichnisse in anderen Dateisystemen/Partitionen | ||
; | ; -fstype Typ | ||
die Datei ist in einem Dateisystem vom angegebenen Typ; unter anderem werden minix, msdos, ext und proc erkannt | die Datei ist in einem Dateisystem vom angegebenen Typ; unter anderem werden minix, msdos, ext und proc erkannt | ||
=== | === Dateiname === | ||
Mit vollständigem Namen | Mit vollständigem Namen find -name hausarbeit.odt | ||
* Sucht die Datei '''hausarbeit.odt''' im aktuellen Verzeichnis und allen Unterverzeichnissen | * Sucht die Datei '''hausarbeit.odt''' im aktuellen Verzeichnis und allen Unterverzeichnissen | ||
* Sind mehrere Dateien dieses Namens vorhanden, werden alle Fundstellen aufgelistet | * Sind mehrere Dateien dieses Namens vorhanden, werden alle Fundstellen aufgelistet | ||
* Jokerzeichen, [http://de.wikipedia.org/wiki/Wildcard_%28Informatik%29 Wildcards], wie der ''*</nowiki>'' oder das ''?'' müssen maskiert werden, sonst interpretiert sie schon die Shell | * Jokerzeichen, [http://de.wikipedia.org/wiki/Wildcard_%28Informatik%29 Wildcards], wie der ''*</nowiki>'' oder das ''?'' müssen maskiert werden, sonst interpretiert sie schon die Shell | ||
* find -name "*.pdf" | * find -name "*.pdf" | ||
* Sucht im aktuellen Verzeichnis nach PDF-Dateien. ''-name'' berücksichtigt die Groß-/Kleinschreibung bei der Suche, findet also mit obigen Beispiel keine Datei(en) mit Endung '''*.PDF</nowiki>''' | * Sucht im aktuellen Verzeichnis nach PDF-Dateien. ''-name'' berücksichtigt die Groß-/Kleinschreibung bei der Suche, findet also mit obigen Beispiel keine Datei(en) mit Endung '''*.PDF</nowiki>''' | ||
* Das ''*</nowiki>'' steht für eine beliebige Anzahl Zeichen | * Das ''*</nowiki>'' steht für eine beliebige Anzahl Zeichen | ||
* find -iname "a*.pdf" | * find -iname "a*.pdf" | ||
* Sucht im aktuellen Verzeichnis nach '''.pdf'''- und '''.PDF'''-Dateien, die mit ''a'' oder ''A'' beginnen. | * Sucht im aktuellen Verzeichnis nach '''.pdf'''- und '''.PDF'''-Dateien, die mit ''a'' oder ''A'' beginnen. find -name "katze.*" | ||
* findet '''katze.jpg''', '''katze.png''', '''katze.txt''' und so weiter | * findet '''katze.jpg''', '''katze.png''', '''katze.txt''' und so weiter find -name "katze.??g" | ||
* findet '''katze.jpg''', '''katze.png''' und so weiter Jedes Fragezeichen steht für ein einzelnes Zeichen | * findet '''katze.jpg''', '''katze.png''' und so weiter Jedes Fragezeichen steht für ein einzelnes Zeichen | ||
* find -name "*foo*.*x*" | * find -name "*foo*.*x*" | ||
* findet '''foo.x''', '''afoo.x''', '''foob.txt''' und so weiter | * findet '''foo.x''', '''afoo.x''', '''foob.txt''' und so weiter | ||
; | ; -name <Muster> | ||
Finde Dateien, deren Name ''<Muster>'' entspricht | Finde Dateien, deren Name ''<Muster>'' entspricht | ||
* Mit dieser Option wird ''<Muster>'' wie ein Suchmuster behandelt (siehe Kapitel [http://www.murnauer.de/mandrakeref/glob-regex.html Suchmuster und Reguläre Ausdrücke]) | * Mit dieser Option wird ''<Muster>'' wie ein Suchmuster behandelt (siehe Kapitel [http://www.murnauer.de/mandrakeref/glob-regex.html Suchmuster und Reguläre Ausdrücke]) | ||
; | ; -iname <Muster> | ||
Findet Dateien mit Name, wie ''-name'', ignoriert jedoch Groß- und Kleinschreibung | Findet Dateien mit Name, wie ''-name'', ignoriert jedoch Groß- und Kleinschreibung | ||
; | ; -path Name | ||
Findet Dateien mit Name, wobei Name auch Pfadangaben enthalten kann ("*/include/*.h") | Findet Dateien mit Name, wobei Name auch Pfadangaben enthalten kann ("*/include/*.h") | ||
* Sucht man mit Verzeichnisnamen, in denen ein Schrägstrich '/' vorkommt, kommt man mit '-name' nicht weiter | * Sucht man mit Verzeichnisnamen, in denen ein Schrägstrich '/' vorkommt, kommt man mit '-name' nicht weiter | ||
* Der Parameter '-path' ist hier die Lösung, denn er erlaubt die Interpretation des Zeichens '/'. | * Der Parameter '-path' ist hier die Lösung, denn er erlaubt die Interpretation des Zeichens '/'. find -path "*2013/J*" | ||
* findet '''~/fotos/2013/Juni''' und '''~/musik/2013/Juli''', aber nicht '''~/dokumente/2013-Juni''' | * findet '''~/fotos/2013/Juni''' und '''~/musik/2013/Juli''', aber nicht '''~/dokumente/2013-Juni''' | ||
==== | ==== Reguläre Ausdrücke ==== | ||
''find'' hat nicht nur einfach RegEx-Support, es beherrscht auch mehrere unterschiedliche Arten der RegEx-Syntax | ''find'' hat nicht nur einfach RegEx-Support, es beherrscht auch mehrere unterschiedliche Arten der RegEx-Syntax | ||
* Mit ''-regextype'' und eine der unterstützten Arten wie ''posix-awk'', ''posix-egrep'', kannst du den Typ wählen | * Mit ''-regextype'' und eine der unterstützten Arten wie ''posix-awk'', ''posix-egrep'', kannst du den Typ wählen | ||
* Lies unter ''man find'' nach, welche Arten unterstüzt werden | * Lies unter ''man find'' nach, welche Arten unterstüzt werden | ||
* Ein kurze Beispiel | * Ein kurze Beispiel | ||
* Sagen wir ich suche alle Dateien die entweder eine .php oder .js Endung | * Sagen wir ich suche alle Dateien die entweder eine .php oder .js Endung | ||
* Ich könnte das folgende laufen lassen: | * Ich könnte das folgende laufen lassen: | ||
* find -regextype posix-egrep -regex '.*(php|js)$'* die egrep-Syntax ''-regextype posix-egrep'' zu benutzen und hinten kommt der Reguläre Ausdruck nach dem gesucht wird | * find -regextype posix-egrep -regex '.*(php|js)$'* die egrep-Syntax ''-regextype posix-egrep'' zu benutzen und hinten kommt der Reguläre Ausdruck nach dem gesucht wird | ||
* Der Ausdruck beginnt und endet mit einem Hochkomma, damit die Shell nicht versucht die RegEx auszuwerten | * Der Ausdruck beginnt und endet mit einem Hochkomma, damit die Shell nicht versucht die RegEx auszuwerten | ||
* Der Ausdruck ''.*'' ist ein Joker und bedeute „ein oder mehr beliebige Zeichen“. ''(php|js)'' weist an nach ''php'' oder ''js'' zu suchen | * Der Ausdruck ''.*'' ist ein Joker und bedeute „ein oder mehr beliebige Zeichen“. ''(php|js)'' weist an nach ''php'' oder ''js'' zu suchen | ||
* Die Pipe (|) steht hier für "oder" | * Die Pipe (|) steht hier für "oder" | ||
* Das Dollarzeichen "$" hinten weist an, den Ausdruck am Ende eines Strings zu suchen | * Das Dollarzeichen "$" hinten weist an, den Ausdruck am Ende eines Strings zu suchen | ||
* Also trifft etwa eine Datei namens ''js.txt'' nicht auf die Abfrage zu | * Also trifft etwa eine Datei namens ''js.txt'' nicht auf die Abfrage zu | ||
; | ; -regex Muster | ||
Wie "-name", nur kann das Muster reguläre Ausdrücke enthalten | Wie "-name", nur kann das Muster reguläre Ausdrücke enthalten | ||
; | ; -regex Muster | ||
der Pfadname passt zu dem regulären Ausdruck Muster | der Pfadname passt zu dem regulären Ausdruck Muster | ||
; | ; -regex <Muster>: | ||
Wie ''-name'', jedoch wird hier ''Muster'' als regulärer Ausdruck behandelt | Wie ''-name'', jedoch wird hier ''Muster'' als regulärer Ausdruck behandelt | ||
; | ; -iregex Muster | ||
Wie „-regex“ jedoch ohne Groß-/keinschreibung zu beachten | Wie „-regex“ jedoch ohne Groß-/keinschreibung zu beachten | ||
; | ; -iregex <Muster>: | ||
Wie ''-regex'', ignoriert aber Groß- und Kleinschreibung | Wie ''-regex'', ignoriert aber Groß- und Kleinschreibung | ||
; | ; -regextype type | ||
Ändert die Syntax der regulären Ausdrücke, die von -regex und -iregex verstanden werden | Ändert die Syntax der regulären Ausdrücke, die von -regex und -iregex verstanden werden | ||
* Folgende Typen sind implementiert: emacs (Standard), posix-awk, posix-basic, posix-egrep und posix-extende | * Folgende Typen sind implementiert: emacs (Standard), posix-awk, posix-basic, posix-egrep und posix-extende | ||
=== | === Dateitypen === | ||
; | ; -type C | ||
die Datei ist vom Typ C; folgende Typen werden unterschieden: | die Datei ist vom Typ C; folgende Typen werden unterschieden: | ||
* b gepufferte Gerätedatei für ein blockorientiertes Gerät | * b gepufferte Gerätedatei für ein blockorientiertes Gerät | ||
Zeile 207: | Zeile 175: | ||
* s Socket | * s Socket | ||
Suche nach einem bestimmten Dateityp | Suche nach einem bestimmten Dateityp | ||
''<Typ>'' kann folgende Werte annehmen: ''f'' (reguläre Datei), ''d'' (Verzeichnis), ''l'' (symbolischer Verweis), ''s'' (Socket), ''b'' (Blockdatei), ''c'' (Zeichendatei) oder ''p'' (benannte Umleitung) | ''<Typ>'' kann folgende Werte annehmen: ''f'' (reguläre Datei), ''d'' (Verzeichnis), ''l'' (symbolischer Verweis), ''s'' (Socket), ''b'' (Blockdatei), ''c'' (Zeichendatei) oder ''p'' (benannte Umleitung) | ||
{|| class="wikitable sortable" | {|| class="wikitable sortable" | ||
|- | |- | ||
| | | | b | ||
| | | | | ||
|- | |- | ||
| | | | c | ||
| | | | | ||
|- | |- | ||
| | | | d | ||
| | | | | ||
|- | |- | ||
| | | | p | ||
| | | | | ||
|- | |- | ||
| | | | f | ||
| | | | | ||
|- | |- | ||
| | | | l | ||
| | | | | ||
|- | |- | ||
| | | | s | ||
| | | | | ||
|- | |- | ||
|} | |} | ||
; | ; Finde nur Dateien | ||
$ '''find -type f''' | $ '''find -type f''' | ||
* Das ''f'' steht für 'files' | * Das ''f'' steht für 'files' | ||
* Findet keine Verzeichnisse, aber alle herkömmlichen Dateien in allen Unterverzeichnissen | * Findet keine Verzeichnisse, aber alle herkömmlichen Dateien in allen Unterverzeichnissen | ||
; | ; Finde nur Verzeichnisse | ||
$ '''find -type d ''' | $ '''find -type d ''' | ||
* Das ''d'' steht für 'directories' | * Das ''d'' steht für 'directories' | ||
* Findet alle Unterverzeichnisse, aber keine sonstigen Dateien | * Findet alle Unterverzeichnisse, aber keine sonstigen Dateien | ||
; | ; -xtype C | ||
das gleiche wie -type für alle Dateien, die keine symbolischen Links sind | das gleiche wie -type für alle Dateien, die keine symbolischen Links sind | ||
* wenn die Datei ein symbolischer Link ist und die Option -follow nicht gesetzt ist, wird die Datei, auf die der Link zeigt, auf den Typ C geprüft | * wenn die Datei ein symbolischer Link ist und die Option -follow nicht gesetzt ist, wird die Datei, auf die der Link zeigt, auf den Typ C geprüft | ||
* wenn die Option -follow gesetzt ist, ist der Test wahr, wenn C = l ist | * wenn die Option -follow gesetzt ist, ist der Test wahr, wenn C = l ist | ||
=== Datum/Zeit | === Zeitstempel === | ||
Datum/Zeit | |||
; Dateien nach Zeitstempeln suchen | ; Dateien nach Zeitstempeln suchen | ||
Zeile 285: | Zeile 254: | ||
|} | |} | ||
; Argumente '''N''' | ; Argumente '''N''' | ||
{| class="wikitable sortable" | {| class="wikitable sortable" | ||
|- | |- | ||
Zeile 312: | Zeile 281: | ||
siehe [[Linux/Datei:Zeitstempel]] | siehe [[Linux/Datei:Zeitstempel]] | ||
; Tage | ; Tage | ||
$ find -mtime -365 | $ find -mtime -365 | ||
* Sucht nach Dateien, deren Inhalt innerhalb der letzten 365 Tage geändert wurde (''mtime'' = modification time) | * Sucht nach Dateien, deren Inhalt innerhalb der letzten 365 Tage geändert wurde (''mtime'' = modification time) | ||
* Weitere Optionen sind * ''ctime'' (change time): Zeitpunkt, an dem der Status der Datei geändert wurde (Name, Rechte) | * Weitere Optionen sind * ''ctime'' (change time): Zeitpunkt, an dem der Status der Datei geändert wurde (Name, Rechte) | ||
* ''atime'' (access time): Zeitpunkt an dem auf die Datei zugegriffen wurde | * ''atime'' (access time): Zeitpunkt an dem auf die Datei zugegriffen wurde | ||
* Ein Dateilisting selbst ist damit nicht gemeint | * Ein Dateilisting selbst ist damit nicht gemeint | ||
* Bei Bilddateien zählt die Vorschaufunktion eines grafischen Dateimanagers aber bereits als Zugriff | * Bei Bilddateien zählt die Vorschaufunktion eines grafischen Dateimanagers aber bereits als Zugriff | ||
* Auch hier gibt es, ähnlich wie bei der [http://wiki.ubuntuusers.de/find#Nach-Dateigroesse-suchen Größe], Mindestalter (''+''), Höchstalter (''-'') und genaues Alter | * Auch hier gibt es, ähnlich wie bei der [http://wiki.ubuntuusers.de/find#Nach-Dateigroesse-suchen Größe], Mindestalter (''+''), Höchstalter (''-'') und genaues Alter | ||
; -newer Referenzdatei | ; -newer Referenzdatei | ||
die Datei ist später verändert worden als die Referenzdatei; zusammen mit -follow tritt -newer nur in Effekt, wenn -follow vor -newer in der Kommandozeile steht | die Datei ist später verändert worden als die Referenzdatei; zusammen mit -follow tritt -newer nur in Effekt, wenn -follow vor -newer in der Kommandozeile steht | ||
; -used N | ; -used N | ||
auf die Datei ist N Tage nach der letzten Änderung zugegriffen worden | auf die Datei ist N Tage nach der letzten Änderung zugegriffen worden | ||
; -atime Tage | ; -atime Tage | ||
Findet Dateien, auf die vor Tagen zugegriffen wurden (zur Angabe von Bereichen siehe Option "amin") | Findet Dateien, auf die vor Tagen zugegriffen wurden (zur Angabe von Bereichen siehe Option "amin") | ||
; -atime <n>, -amin <n> | ; -atime <n>, -amin <n> | ||
Finde Dateien, auf die zuletzt vor ''<n>'' Tagen (''-atime'') oder ''<n>'' Minuten (''-amin'') zugegriffen wurde | Finde Dateien, auf die zuletzt vor ''<n>'' Tagen (''-atime'') oder ''<n>'' Minuten (''-amin'') zugegriffen wurde | ||
* Sie können auch ''+<n>'' oder ''-<n>'' spezifizieren | * Sie können auch ''+<n>'' oder ''-<n>'' spezifizieren | ||
* Dann wird nach Dateien gesucht, auf die vor höchstens, oder mindestens ''<n>'' Tagen, oder Minuten zugegriffen wurde | * Dann wird nach Dateien gesucht, auf die vor höchstens, oder mindestens ''<n>'' Tagen, oder Minuten zugegriffen wurde | ||
; -atime N | ; -atime N | ||
auf die Datei ist vor N*24 Stunden zugegriffen worden | auf die Datei ist vor N*24 Stunden zugegriffen worden | ||
; -anewer Referenzdatei | ; -anewer Referenzdatei | ||
auf die Datei ist vor weniger Zeit zugegriffen worden, als seit der letzten Veränderung der Referenzdatei vergangen ist; im Zusammenhang mit -follow tritt -anewer nur in Effekt, wenn -follow vor -anewer in der Kommandozeile steht | auf die Datei ist vor weniger Zeit zugegriffen worden, als seit der letzten Veränderung der Referenzdatei vergangen ist; im Zusammenhang mit -follow tritt -anewer nur in Effekt, wenn -follow vor -anewer in der Kommandozeile steht | ||
; -anewer <Datei> | ; -anewer <Datei> | ||
Findet Dateien auf die später zugegriffen wurde als auf Datei ''<Datei>'' | Findet Dateien auf die später zugegriffen wurde als auf Datei ''<Datei>'' | ||
; -amin Minuten | ; -amin Minuten | ||
Findet Dateien, auf die vor Minuten zugegriffen wurden | Findet Dateien, auf die vor Minuten zugegriffen wurden | ||
* Um bspw | * Um bspw | ||
* alle Dateien zu finden, deren Zugriff vor 2 bis 8 Minuten geschah, können die Angaben kombiniert werden: "-amin +2 -amin -8" | * alle Dateien zu finden, deren Zugriff vor 2 bis 8 Minuten geschah, können die Angaben kombiniert werden: "-amin +2 -amin -8" | ||
; -amin N | ; -amin N | ||
auf die Datei ist vor N Minuten zugegriffen worden | auf die Datei ist vor N Minuten zugegriffen worden | ||
; Minuten | ; Minuten | ||
Sometimes you need to look for files modified in the last day or so, and the previous options are a bit too broad for that | Sometimes you need to look for files modified in the last day or so, and the previous options are a bit too broad for that | ||
* The good news is that ''find'' also has the '''-amin''', '''-cmin''', and '''-mmin''', which are similar to the other options but they work with minutes rather than days | * The good news is that ''find'' also has the '''-amin''', '''-cmin''', and '''-mmin''', which are similar to the other options but they work with minutes rather than days | ||
* So if you want to look for something that was changed or accessed in the last day, you can use those options | * So if you want to look for something that was changed or accessed in the last day, you can use those options | ||
* find -amin -5 | * find -amin -5 | ||
* nach Dateien suchen, auf die in den letzten 5 Minuten zugegriffen wurde | * nach Dateien suchen, auf die in den letzten 5 Minuten zugegriffen wurde | ||
* Analog: ''-cmin'', ''-mmin'' | * Analog: ''-cmin'', ''-mmin'' | ||
; Alle Dateien, auf die in der letzten Minute zugegriffen wurde | ; Alle Dateien, auf die in der letzten Minute zugegriffen wurde | ||
Um die nachfolgende Suche erfolgreich enden zu lassen, manipulieren wir mit Hilfe von "touch" die Zugriffszeiten einiger Dateien '''touch sax* find . -amin 1 .''' ./saxsys.tgz ./sax_logo.gif | Um die nachfolgende Suche erfolgreich enden zu lassen, manipulieren wir mit Hilfe von "touch" die Zugriffszeiten einiger Dateien '''touch sax* find . -amin 1 .''' ./saxsys.tgz ./sax_logo.gif | ||
; -ctime <n>, -cmin <n>, -cnewer <Datei> | ; -ctime <n>, -cmin <n>, -cnewer <Datei> | ||
Genau wie ''-atime'', ''-amin'' und ''-anewer'', doch in Bezug auf die letzte Inhaltsänderung der Datei | Genau wie ''-atime'', ''-amin'' und ''-anewer'', doch in Bezug auf die letzte Inhaltsänderung der Datei | ||
; -ctime N | ; -ctime N | ||
der Dateistatus wurde vor N*24 Stunden geändert | der Dateistatus wurde vor N*24 Stunden geändert | ||
; -cmin N | ; -cmin N | ||
der Status der Datei wurde vor N Minuten geändert | der Status der Datei wurde vor N Minuten geändert | ||
; -cnewer Referenzdatei | ; -cnewer Referenzdatei | ||
der Status der Datei wurde vor weniger Zeit verändert, als seit der letzten Veränderung der Referenzdatei vergangen ist; zusammen mit -follow tritt -cnewer nur in Effekt, wenn -follow vor -cnewer in der Kommandozeile steht | der Status der Datei wurde vor weniger Zeit verändert, als seit der letzten Veränderung der Referenzdatei vergangen ist; zusammen mit -follow tritt -cnewer nur in Effekt, wenn -follow vor -cnewer in der Kommandozeile steht | ||
; Vergleich $ find -cnewer /tmp/referenz | ; Vergleich $ find -cnewer /tmp/referenz | ||
* Nach Dateien suchen, die nach der Referenzdatei geändert wurden | * Nach Dateien suchen, die nach der Referenzdatei geändert wurden | ||
* Mit ''touch --date='15:00' /tmp/referenz'' erstellt man sich eine Referenzdatei, wenn man keine hat | * Mit ''touch --date='15:00' /tmp/referenz'' erstellt man sich eine Referenzdatei, wenn man keine hat | ||
; -mtime Tage | ; -mtime Tage | ||
Findet Dateien, die vor Tagen geändert wurden (zur Angabe von Bereichen siehe Option »amin«) | Findet Dateien, die vor Tagen geändert wurden (zur Angabe von Bereichen siehe Option »amin«) | ||
; -mtime N | ; -mtime N | ||
der Inhalt der Datei wurde vor IN*24 Stunden verändert | der Inhalt der Datei wurde vor IN*24 Stunden verändert | ||
; -mmin N | ; -mmin N | ||
der Inhalt der Datei wurde vor N Minuten verändert | der Inhalt der Datei wurde vor N Minuten verändert | ||
; -daystart | ; -daystart | ||
misst die Zeiten für die -amin, -atime, -cmin, -ctime, -mmin und -mtime Eigenschaften vom Beginn des aktuellen Tages anstelle der letzten 24 Stunden | misst die Zeiten für die -amin, -atime, -cmin, -ctime, -mmin und -mtime Eigenschaften vom Beginn des aktuellen Tages anstelle der letzten 24 Stunden | ||
* Diese Option betrifft nur die Tests, die weiter hinten in der Kommandozeile geschrieben sind | * Diese Option betrifft nur die Tests, die weiter hinten in der Kommandozeile geschrieben sind | ||
* Werden zeit-bezogene Tests durchgeführt (siehe unten), wird der Beginn des aktuellen Tages als Zeitstempel genommen (und nicht der Zeitpunkt vor 24 Stunden, was der Standard-Einstellung entspricht) | * Werden zeit-bezogene Tests durchgeführt (siehe unten), wird der Beginn des aktuellen Tages als Zeitstempel genommen (und nicht der Zeitpunkt vor 24 Stunden, was der Standard-Einstellung entspricht) | ||
=== Größe === | === Größe === | ||
Manchmal ist es nützlich, andere Attribute zur Suche zu verwenden | Manchmal ist es nützlich, andere Attribute zur Suche zu verwenden | ||
* Etwa Dateien nach Größe zu finden | * Etwa Dateien nach Größe zu finden | ||
* Ein gutes Beispiel: du arbeitest mit einem Server und stellst fest, dass eine der Partitionen beginnt, voll zu werden | * Ein gutes Beispiel: du arbeitest mit einem Server und stellst fest, dass eine der Partitionen beginnt, voll zu werden | ||
* Um welche Datei, oder Dateien, handelt es sich? Mit ''find'' suchst du Dateien nach Größe und kannst dich dann darum kümmern, Platz zu schaffen | * Um welche Datei, oder Dateien, handelt es sich? Mit ''find'' suchst du Dateien nach Größe und kannst dich dann darum kümmern, Platz zu schaffen | ||
* Die Option um nach Größe zu prüfen ist ''-size'', gefolgt von der Größenangabe, nach der du suchst | * Die Option um nach Größe zu prüfen ist ''-size'', gefolgt von der Größenangabe, nach der du suchst | ||
* Du kannst alle möglichen Einheiten angeben, von Blöcken (b) bis Gigabytes (G) | * Du kannst alle möglichen Einheiten angeben, von Blöcken (b) bis Gigabytes (G) | ||
* Um Dateien der Größe 100 kB zu finden, gibst du ein: find -size 100k | * Um Dateien der Größe 100 kB zu finden, gibst du ein: find -size 100k | ||
* Damit werden alle Dateien der Größe 100 kB gefunden | * Damit werden alle Dateien der Größe 100 kB gefunden | ||
* Das ist ziemlich speziell | * Das ist ziemlich speziell | ||
* Um größere oder kleinere Dateien einer bestimmten Größe zu finden, verwendest du ''+'' oder ''-'' zusätzlich zur Zahl | * Um größere oder kleinere Dateien einer bestimmten Größe zu finden, verwendest du ''+'' oder ''-'' zusätzlich zur Zahl | ||
* Also sollte ''find -size +100k'' alle Dateien größer als 100 kB zurückgeben | * Also sollte ''find -size +100k'' alle Dateien größer als 100 kB zurückgeben | ||
* Und ''find -size -100k'' alles was kleiner ist | * Und ''find -size -100k'' alles was kleiner ist | ||
* Mit dem ''-empty''-Parameter kannst du auch leere Dateien finden: find -empty -type -f | * Mit dem ''-empty''-Parameter kannst du auch leere Dateien finden: find -empty -type -f | ||
* Beachte, dass ich eine zusätzliche Prüfung für den Typ der Datei verwende | * Beachte, dass ich eine zusätzliche Prüfung für den Typ der Datei verwende | ||
* Ohne diese Option wird ''find'' Verzeichnisse als „leere Dateien“ anzeigen | * Ohne diese Option wird ''find'' Verzeichnisse als „leere Dateien“ anzeigen | ||
; | ; -size Number[Einheit] | ||
Findet Dateien einer bestimmten Dateigröße | Findet Dateien einer bestimmten Dateigröße | ||
* In der Voreinstellung ist die »Einheit« 512 Byte große Blöcke, das heißt, bei Number=1 werden alle Dateien mit einer Größe zwischen 1 und 512 Bytes gefunden | * In der Voreinstellung ist die »Einheit« 512 Byte große Blöcke, das heißt, bei Number=1 werden alle Dateien mit einer Größe zwischen 1 und 512 Bytes gefunden | ||
* Als Einheit kann stehen: b für 512 Byte-Blöcke (Voreinstellung), c für 1 Byte-Blöcke, k für Kilobyte-Blöcke und w für 2 Byte-Blöcke | * Als Einheit kann stehen: b für 512 Byte-Blöcke (Voreinstellung), c für 1 Byte-Blöcke, k für Kilobyte-Blöcke und w für 2 Byte-Blöcke | ||
; | ; Maximale Größe | ||
find -size -100c -ls | find -size -100c -ls | ||
* Nach Dateien suchen, die bis zu 100 Bytes belegen | * Nach Dateien suchen, die bis zu 100 Bytes belegen | ||
* Das ''-'' vor der Zahl bedeutet "bis zu" | * Das ''-'' vor der Zahl bedeutet "bis zu" | ||
* Das ''c'' hinter der Zahl bedeutet ''character'', welche früher 1 Byte belegten, aber ''b'' ist schon für die Maßeinheit Block (= 512 Bytes) vergeben | * Das ''c'' hinter der Zahl bedeutet ''character'', welche früher 1 Byte belegten, aber ''b'' ist schon für die Maßeinheit Block (= 512 Bytes) vergeben | ||
* Mittels ''-ls'' läßt sich die Größe der gefundenen Dateien überprüfen | * Mittels ''-ls'' läßt sich die Größe der gefundenen Dateien überprüfen | ||
* Deswegen wird es hier, vor den anderen Aktionen, erwähnt | * Deswegen wird es hier, vor den anderen Aktionen, erwähnt | ||
; | ; Exakte Größe | ||
find -size 100c -ls | find -size 100c -ls | ||
* nach Dateien suchen, die genau 100 Bytes groß sind (kein Vorzeichen) | * nach Dateien suchen, die genau 100 Bytes groß sind (kein Vorzeichen) | ||
; | ; Mindestgröße | ||
find -size +100M | find -size +100M | ||
* Nach Dateien suchen, die 100 Megabytes oder größer sind (Vorzeichen ''+'') | * Nach Dateien suchen, die 100 Megabytes oder größer sind (Vorzeichen ''+'') | ||
* Statt ''M'' kann man auch ''k'' und ''G'' für Kilobytes und Gigabytes angeben | * Statt ''M'' kann man auch ''k'' und ''G'' für Kilobytes und Gigabytes angeben | ||
; | ; Zwischen Mindest- und Maximalgröße | ||
find -type f -size +64c -size -4096c | wc -l | find -type f -size +64c -size -4096c | wc -l | ||
* Nur nach Dateien suchen, die zwischen 64 und 4096 Bytes groß sind, und per Pipe an [http://wiki.ubuntuusers.de/wc wc] übergeben, um die Anzahl der gefundenen Dateien zu bestimmen | * Nur nach Dateien suchen, die zwischen 64 und 4096 Bytes groß sind, und per Pipe an [http://wiki.ubuntuusers.de/wc wc] übergeben, um die Anzahl der gefundenen Dateien zu bestimmen | ||
; | ; Blockgröße | ||
find -size 10 | find -size 10 | ||
* Ohne Angabe zur Maßeinheit wird die Zahl als Anzahl Blöcke interpretiert, hier also nach 10 Blöcken à 512 Bytes | * Ohne Angabe zur Maßeinheit wird die Zahl als Anzahl Blöcke interpretiert, hier also nach 10 Blöcken à 512 Bytes | ||
* Die Angabe ''b'' ist gleich bedeutend | * Die Angabe ''b'' ist gleich bedeutend | ||
* Wenn es Probleme mit der Größe gibt, dann wahrscheinlich, weil man ''c'' oder ''k'' oder ''M'' vergessen hast | * Wenn es Probleme mit der Größe gibt, dann wahrscheinlich, weil man ''c'' oder ''k'' oder ''M'' vergessen hast | ||
; | ; Leeren Dateien | ||
Leere Verzeichnisse und Dateien der Größe 0 | Leere Verzeichnisse und Dateien der Größe 0 find -empty | ||
; | ; -empty | ||
die reguläre Datei oder das Verzeichnis ist leer | die reguläre Datei oder das Verzeichnis ist leer | ||
; | ; "size N[{c,k}]" | ||
die Datei belegt N Datenblöcke zu 512 Bytes, oder N Bytes und N Kilobytes mit nachgestelltem c oder k | die Datei belegt N Datenblöcke zu 512 Bytes, oder N Bytes und N Kilobytes mit nachgestelltem c oder k | ||
Zeile 454: | Zeile 423: | ||
$ find / -user BENUTZERNAME | $ find / -user BENUTZERNAME | ||
; | ; Dateien nach Benutzer suchen | ||
Ein weiterer nützlicher Einsatz von ''find'' ist es, Dateien nach Besitzerstatus zu lokalisieren, sogar Dateien mit fehlendem Besitzer | Ein weiterer nützlicher Einsatz von ''find'' ist es, Dateien nach Besitzerstatus zu lokalisieren, sogar Dateien mit fehlendem Besitzer | ||
* Schauen wir uns das mal an | * Schauen wir uns das mal an | ||
* Wenn du Dateien zwischen Systemen verschoben hast, oder wenn du Benutzer entfernt hast, hast du möglicherweise verwaiste Dateien | * Wenn du Dateien zwischen Systemen verschoben hast, oder wenn du Benutzer entfernt hast, hast du möglicherweise verwaiste Dateien | ||
* Um solche zu finden nimmst du: find -nouser | * Um solche zu finden nimmst du: find -nouser | ||
* Um Dateien, die tatsächlich im Besitz eines bestimmten Benutzers sind, zu finden, nimmst du die ''-user'' oder ''-uid'' Optionen | * Um Dateien, die tatsächlich im Besitz eines bestimmten Benutzers sind, zu finden, nimmst du die ''-user'' oder ''-uid'' Optionen | ||
* Die ''-uid'' Option erlaubt dir nach der nummerischen User-ID (UID) zu suchen und ''-user'' erlaubt dir nach Name oder UID zu suchen | * Die ''-uid'' Option erlaubt dir nach der nummerischen User-ID (UID) zu suchen und ''-user'' erlaubt dir nach Name oder UID zu suchen | ||
* Also wenn ich alle meine Dateien in einem Verzeichnis finden will benutze ich ''find -user jzb'' | * Also wenn ich alle meine Dateien in einem Verzeichnis finden will benutze ich ''find -user jzb'' | ||
* Oder ich könnte ''find -user 1000'' oder ''find -uid 1000'' eingeben | * Oder ich könnte ''find -user 1000'' oder ''find -uid 1000'' eingeben | ||
* Vielleicht suchst du die Dateien die Benutzer A ''oder'' B gehören | * Vielleicht suchst du die Dateien die Benutzer A ''oder'' B gehören | ||
* Das kannst du erreichen indem du den Operator ''-o'' hinzufügst: find -user root -o -user www-data | * Das kannst du erreichen indem du den Operator ''-o'' hinzufügst: find -user root -o -user www-data | ||
* Damit werden alle Dateien gefunden die Benutzer ''root'' oder ''www-data'' gehören | * Damit werden alle Dateien gefunden die Benutzer ''root'' oder ''www-data'' gehören | ||
* Wenn du umgekehrt alle Dateien finden möchtest die ''nicht'' dem bestimmten Benutzer gehören, nimmst du den ''-not''-Operator: find -not -user www-data | * Wenn du umgekehrt alle Dateien finden möchtest die ''nicht'' dem bestimmten Benutzer gehören, nimmst du den ''-not''-Operator: find -not -user www-data | ||
* Natürlich funktioniert ''-not'' auch zusammen mit anderen Optionen | * Natürlich funktioniert ''-not'' auch zusammen mit anderen Optionen | ||
* Du könntest nach allen Dateien suchen die einem Benutzer gehören, die nicht mehr als eine bestimmte Größe haben | * Du könntest nach allen Dateien suchen die einem Benutzer gehören, die nicht mehr als eine bestimmte Größe haben | ||
* Beispiel: find -user www-data -not -size +100k | * Beispiel: find -user www-data -not -size +100k | ||
; | ; -user Nutzer | ||
Findet Dateien des "Nutzers" (UID oder Nutzername) | Findet Dateien des "Nutzers" (UID oder Nutzername) | ||
; | ; Alle Dateien im Verzeichnis /tmp, die »user« gehören | ||
'''find /tmp/ -user user 2>/dev/null''' /tmp/kfm-cache-500 /tmp/kfm-cache-500/index.html /tmp/kfm-cache-500/index.txt /tmp/acout.1364.NHKnJh /tmp/acin.1364.c36auh | '''find /tmp/ -user user 2>/dev/null''' | ||
/tmp/kfm-cache-500 | |||
/tmp/kfm-cache-500/index.html | |||
/tmp/kfm-cache-500/index.txt | |||
/tmp/acout.1364.NHKnJh | |||
/tmp/acin.1364.c36auh | |||
; | ; Dateien nach Gruppen suchen (-group) | ||
Eine weitere Möglichkeit, nach Dateien zu suchen ist nach Gruppe, mit der ''-group''-Option | Eine weitere Möglichkeit, nach Dateien zu suchen ist nach Gruppe, mit der ''-group''-Option | ||
* Diese Option arbeitet mit einem Gruppennamen oder einer Gruppen-ID (GID) | * Diese Option arbeitet mit einem Gruppennamen oder einer Gruppen-ID (GID) | ||
* Die grundlegende Syntax ist | * Die grundlegende Syntax ist ''find -group groupname'' | ||
* Können mit anderen Operatoren kombiniert werden, um zum Beispiel Dateien eines Benutzers zu finden, die auch zu einer bestimmten Gruppe gehören.s | * Können mit anderen Operatoren kombiniert werden, um zum Beispiel Dateien eines Benutzers zu finden, die auch zu einer bestimmten Gruppe gehören.s | ||
; | ; -user Name | ||
die Datei gehört dem Anwender Name | die Datei gehört dem Anwender Name | ||
; | ; -uid N | ||
die Kennziffer des Eigentümers ist N | die Kennziffer des Eigentümers ist N | ||
; | ; -gid N | ||
die Datei gehört der Gruppe mit der Kennzahl N | die Datei gehört der Gruppe mit der Kennzahl N | ||
; | ; -group Name | ||
die Datei gehört der Gruppe Name | die Datei gehört der Gruppe Name | ||
; | ; -nouser | ||
die Datei gehört keinem im System eingetragenen Benutzer | die Datei gehört keinem im System eingetragenen Benutzer | ||
; | ; -nogroup | ||
die Datei gehört keiner im System angemeldeten Gruppe | die Datei gehört keiner im System angemeldeten Gruppe | ||
==== | === Zugriffsrecht === | ||
Gelegentlich möchtest du dein Dateisystem nach Dateien überprüfen, die global beschreibbar sind, oder sonstige „falsche“ Berechtigungen haben | |||
Gelegentlich möchtest du dein Dateisystem nach Dateien überprüfen, die global beschreibbar sind, oder sonstige „falsche“ Berechtigungen haben | * Das ''find''-Werkzeug unterstützt dies mit mehreren verschiedenen Optionen | ||
* Das ''find''-Werkzeug unterstützt dies mit mehreren verschiedenen Optionen | * Am einfachsten sind die Operatoren ''-readable'', ''-writable'', und ''-executable'' | ||
* Am einfachsten sind die Operatoren ''-readable'', ''-writable'', und ''-executable'' | * Diese prüfen die Berechtigungen des ''aktuell angemeldeten'' Benutzers, der ''find'' aufruft | ||
* Diese prüfen die Berechtigungen des ''aktuell angemeldeten'' Benutzers, der ''find'' aufruft | * Beachte, dass diese Optionen in älteren Versionen von ''find'' nicht verfügbar sind | ||
* Beachte, dass diese Optionen in älteren Versionen von ''find'' nicht verfügbar sind | * Also wenn deine Distribution etwas älter ist hast du diese Optionen eventuell noch nicht | ||
* Also wenn deine Distribution etwas älter ist hast du diese Optionen eventuell noch nicht | * Ein andere Option nach der Dateiberechtigung zu suchen ist die Benutzung von ''-perm'', was nach dem aktuellen Dateistatus schaut | ||
* Ein andere Option nach der Dateiberechtigung zu suchen ist die Benutzung von ''-perm'', was nach dem aktuellen Dateistatus schaut | * Auf diese Art kannst du sehen ob eine Datei mit einer bestimmten Kombination von Berechtigungen übereinstimmt | ||
* Auf diese Art kannst du sehen ob eine Datei mit einer bestimmten Kombination von Berechtigungen übereinstimmt | |||
* Zum Beispiel wenn du sehen willst welche Dateien von Benutzer und Gruppe ausführbar sind, nimmst du: find -type f -perm -110 | * Zum Beispiel wenn du sehen willst welche Dateien von Benutzer und Gruppe ausführbar sind, nimmst du: find -type f -perm -110 | ||
* Die ''110'' sagt ''find'' „Schau nach Dateien das Ausführen-Bit für Benutzer und Gruppe gesetzt haben!“ und das - sagt ''find'' die anderen Bit zu ignorieren | * Die ''110'' sagt ''find'' „Schau nach Dateien das Ausführen-Bit für Benutzer und Gruppe gesetzt haben!“ und das - sagt ''find'' die anderen Bit zu ignorieren | ||
* Das heißt, es spielt keine Rolle, wenn die Datei auch beschreibbar oder lesbar ist, solange die Bit gesetzt sind, die sie ausführbar machen | * Das heißt, es spielt keine Rolle, wenn die Datei auch beschreibbar oder lesbar ist, solange die Bit gesetzt sind, die sie ausführbar machen | ||
* Um die Suche auf Dateien einzuschränken, die ''exakt'' dem angegeben Staus entsprechen, benutzt du nicht den - -Operator | * Um die Suche auf Dateien einzuschränken, die ''exakt'' dem angegeben Staus entsprechen, benutzt du nicht den - -Operator | ||
Was, wenn du nach Dateien suchst die das Ausführen-Bit für Benutzer ''oder'' Gruppe haben? Dann nimmst du / statt - : | Was, wenn du nach Dateien suchst die das Ausführen-Bit für Benutzer ''oder'' Gruppe haben? Dann nimmst du / statt - : | ||
$ find -type f -perm /110 | $ find -type f -perm /110 | ||
Jede Datei, die die Gruppen- oder Eigentümer-Berechtigung hat, wird gefunden | Jede Datei, die die Gruppen- oder Eigentümer-Berechtigung hat, wird gefunden | ||
* Suchen nach Berechtigung kann überaus hilfreich sein, aber auch komplex | * Suchen nach Berechtigung kann überaus hilfreich sein, aber auch komplex | ||
* Es kann etwas dauern um die Syntax zu verstehen, besonders für die, die noch nicht mit dem Eigentümer/Berechtigung-Konzept vertraut sind | * Es kann etwas dauern um die Syntax zu verstehen, besonders für die, die noch nicht mit dem Eigentümer/Berechtigung-Konzept vertraut sind | ||
* In diesem Fall ist das Lesen der ''man''-Seiten nicht nur empfehlenswert, sondern unerlässlich | * In diesem Fall ist das Lesen der ''man''-Seiten nicht nur empfehlenswert, sondern unerlässlich | ||
; | ; -perm Modus | ||
Findet Dateien, deren Rechte exakt dem angegebenem Modus entsprechen (Angabe numerisch oder symbolisch) | Findet Dateien, deren Rechte exakt dem angegebenem Modus entsprechen (Angabe numerisch oder symbolisch) | ||
* die Zugriffsrechte auf die Datei entsprechen exakt dem Modus; der Modus kann als Oktalzahl oder mit den bei chmod(1) beschriebenen Kennungen beschrieben werden, die Kennungen werden auf Modus 000bezogen | * die Zugriffsrechte auf die Datei entsprechen exakt dem Modus; der Modus kann als Oktalzahl oder mit den bei chmod(1) beschriebenen Kennungen beschrieben werden, die Kennungen werden auf Modus 000bezogen | ||
; | ; -perm –Modus | ||
Findet Dateien, bei denen mindestens die durch Modus angegebenen Rechteflags gesetzt sind | Findet Dateien, bei denen mindestens die durch Modus angegebenen Rechteflags gesetzt sind | ||
(mindestens) die Zugriffsrechte für den Modus sind gesetzt | (mindestens) die Zugriffsrechte für den Modus sind gesetzt | ||
; | ; -perm +Modus | ||
Findet Dateien, bei denen mindestens eines der durch Modus angegebenen Rechteflags gesetzt ist | Findet Dateien, bei denen mindestens eines der durch Modus angegebenen Rechteflags gesetzt ist | ||
* die Zugriffsrechte entsprechen höchstens dem Modus (oder sind weiter eingeschränkt) | * die Zugriffsrechte entsprechen höchstens dem Modus (oder sind weiter eingeschränkt) | ||
=== Links === | |||
; -links Anzahl | |||
; | |||
Findet Dateien, auf die Anzahl fester Links zeigen | Findet Dateien, auf die Anzahl fester Links zeigen | ||
; | ; Dateien im Verzeichnis /usr mit 43 harten Links | ||
'''find /usr/ -links 43 2>/dev/null''' | '''find /usr/ -links 43 2>/dev/null''' /usr/include /usr/share | ||
In den Ausgaben wurden die Fehler nach "/dev/null" verschoben, da find natürlich nur Verzeichnisse unter die Lupe nimmt, zu dessen Zugang der Benutzer berechtigt ist | In den Ausgaben wurden die Fehler nach "/dev/null" verschoben, da find natürlich nur Verzeichnisse unter die Lupe nimmt, zu dessen Zugang der Benutzer berechtigt ist | ||
; | ; -lname Muster | ||
die Datei ist ein symbolischer Link auf eine Datei oder ein Verzeichnis mit einem zum Muster passenden Namen | die Datei ist ein symbolischer Link auf eine Datei oder ein Verzeichnis mit einem zum Muster passenden Namen | ||
; | ; -inum IN | ||
die Datei belegt die Inode mit der Nummer N | die Datei belegt die Inode mit der Nummer N | ||
; | ; find all the hard links | ||
A common request is a way to find all the hard links to some file | A common request is a way to find all the hard links to some file | ||
* Using “''ls ‑li ''''file''” will tell you how many hard links the file has, and the ''inode number'' | * Using “''ls ‑li ''''file''” will tell you how many hard links the file has, and the ''inode number'' | ||
* You can locate all pathnames to this file with: | * You can locate all pathnames to this file with: | ||
find ''mount-point'' -xdev -inum ''inode-number'' | find ''mount-point'' -xdev -inum ''inode-number'' | ||
* Since hard links are restricted to a single filesystem, you need to search that whole filesystem so you start the search at the filesystem's ''mount point''. (This is likely to be either “''/home''” or “''/''” for files in your home directory.) | * Since hard links are restricted to a single filesystem, you need to search that whole filesystem so you start the search at the filesystem's ''mount point''. (This is likely to be either “''/home''” or “''/''” for files in your home directory.) | ||
* The “''‑xdev''” option tells ''find'' to not search (descend into) any other filesystems | * The “''‑xdev''” option tells ''find'' to not search (descend into) any other filesystems | ||
* While most Unix and all Linux systems have a ''find'' command that supports the “''‑inum''” criterion, this isn't POSIX standard | * While most Unix and all Linux systems have a ''find'' command that supports the “''‑inum''” criterion, this isn't POSIX standard | ||
* Older Unix systems provided the “''ncheck''” utility instead that could be used for this | * Older Unix systems provided the “''ncheck''” utility instead that could be used for this | ||
=== | === Bedingungen verknüpfen === | ||
find hält logische Operatoren bereit, um verschiedene Kriterien miteinander zu verknüpfen | find hält logische Operatoren bereit, um verschiedene Kriterien miteinander zu verknüpfen | ||
; | ; Tests kombinieren | ||
* ''<c1>'' -a <c2>: Wahr, wenn beide, ''<c1>'' und ''<c2>'', wahr sind. ''-a'' wird bereits implizit aktiviert, daher brauchen Sie nur ''<c1> <c2> <c3>'' | * ''<c1>'' -a <c2>: Wahr, wenn beide, ''<c1>'' und ''<c2>'', wahr sind. ''-a'' wird bereits implizit aktiviert, daher brauchen Sie nur ''<c1> <c2> <c3>'' | ||
* eingeben, wenn Sie alle Tests ''<c1>'', ''<c2>'', | * eingeben, wenn Sie alle Tests ''<c1>'', ''<c2>'', | ||
* durchführen möchten | * durchführen möchten | ||
* ''<c1> -o <c2>'': Wahr, wenn entweder ''<c1>'', ''<c2>'' oder beide wahr sind. ''-o'' hat eine geringere Wertigkeit als ''-a'' | * ''<c1> -o <c2>'': Wahr, wenn entweder ''<c1>'', ''<c2>'' oder beide wahr sind. ''-o'' hat eine geringere Wertigkeit als ''-a'' | ||
* Wenn Sie also Dateien möchten, die Kriterium ''<c1>'' oder ''<c2>'' und Kriterium ''<c3>'' entsprechen, müssen Sie Klammern verwenden: ''( <c1>-o <c2> ) -a <c3>'' | * Wenn Sie also Dateien möchten, die Kriterium ''<c1>'' oder ''<c2>'' und Kriterium ''<c3>'' entsprechen, müssen Sie Klammern verwenden: ''( <c1>-o <c2> ) -a <c3>'' | ||
* Damit die hier verwendeten Klammern nicht von Ihrer Shell interpretiert werden, müssen Sie sie durch Voranstellen eines Rückstriches (\) schützen | * Damit die hier verwendeten Klammern nicht von Ihrer Shell interpretiert werden, müssen Sie sie durch Voranstellen eines Rückstriches (\) schützen | ||
* ''-not <c1>'': Invertiert den Test ''<c1>'' | * ''-not <c1>'': Invertiert den Test ''<c1>'' | ||
* Also ist ''-not <c1>'' wahr, wenn ''<c1>'' falsch ist | * Also ist ''-not <c1>'' wahr, wenn ''<c1>'' falsch ist | ||
; | ; Operatoren | ||
Die Optionen, Tests und Aktionen können mit Operatoren verknüpft werden | Die Optionen, Tests und Aktionen können mit Operatoren verknüpft werden | ||
* Die Bearbeitung erfolgt von links nach rechts | * Die Bearbeitung erfolgt von links nach rechts | ||
{|| class="wikitable sortable" class="wikitable sortable" | {|| class="wikitable sortable" class="wikitable sortable" | ||
|- | |- | ||
| | | | '''( Ausdruck ) ''' | ||
| | | | die Klammern fassen den Ausdruck zu einer Operation zusammen | ||
|- | |- | ||
| | | | '''! Ausdruck ''' | ||
| | | | ist wahr, wenn der Ausdruck falsch ist | ||
|- | |- | ||
| | | | '''-not Ausdruck ''' | ||
| | | | ist ebenfalls wahr, wenn der Ausdruck falsch ist | ||
|- | |- | ||
| | | | '''Ausdruck1 Ausdruck2 ''' | ||
| | | | UND Verknüpfung; wenn Ausdruck1 wahr ist, wird Ausdruck2 bewertet (ausgeführt) | ||
|- | |- | ||
| | | | '''Ausdruck1 -a Ausdruck2 ''' | ||
| | | | auch eine UND Verknüpfung | ||
|- | |- | ||
| | | | '''Ausdruck1 -and Ausdruck2 ''' | ||
| | | | auch eine UND Verknüpfung | ||
|- | |- | ||
| | | | '''Ausdruck1 -o Ausdruck2 ''' | ||
| | | | ODER Verknüpfung; Ausdruck2 wird bewertet (ausgeführt), wenn Ausdruck1 falsch ist | ||
|- | |- | ||
| | | | '''Ausdruck1 -or Ausdruck2 ''' | ||
| | | | auch eine ODER Verknüpfung | ||
|- | |- | ||
| | | | '''Ausdruck1 , Ausdruck2 ''' | ||
| | | | Liste; beide Ausdrücke werden immer bewertet (ausgeführt); der Wahrheitswert des gesamten Ausdrucks entspricht dem von Ausdruck2 | ||
|- | |- | ||
|} | |} | ||
; | ; Und-Kombination | ||
Treffer müssen alle Kriterien erfüllen | Treffer müssen alle Kriterien erfüllen find -mindepth 3 -maxdepth 5 | ||
* Finde ab Unterverzeichnis(se) 3 (''mindepth 3'') UND bis Unterverzeichnis(se) 5 (''-maxdepth 5'') | * Finde ab Unterverzeichnis(se) 3 (''mindepth 3'') UND bis Unterverzeichnis(se) 5 (''-maxdepth 5'') | ||
* Weiters Beispiel der UND-Kombination | * Weiters Beispiel der UND-Kombination | ||
find -mindepth 3 -type f -name "*.avi" -size +5M | find -mindepth 3 -type f -name "*.avi" -size +5M | ||
* Beginnt die Suche ab Unterverzeichnis(se) 3 (''-mindepth 3''), UND findet nur gewöhnliche Dateien (‑''type f''), die die Endung '''.avi''' besitzen UND mindestens 5 MB groß sind (''-size +5M'') | * Beginnt die Suche ab Unterverzeichnis(se) 3 (''-mindepth 3''), UND findet nur gewöhnliche Dateien (‑''type f''), die die Endung '''.avi''' besitzen UND mindestens 5 MB groß sind (''-size +5M'') | ||
; | ; Oder-Kombination | ||
find -name "susi.*" -or -name "susanne.*" | find -name "susi.*" -or -name "susanne.*" | ||
* Sucht alle Dateien die mit "susi." ODER "susanne." beginnen | * Sucht alle Dateien die mit "susi." ODER "susanne." beginnen | ||
; | ; ODER oder NICHT-Kombination | ||
Man kann die Suchoptionen aber auch per ODER oder NICHT verknüpfen: | Man kann die Suchoptionen aber auch per ODER oder NICHT verknüpfen: | ||
* Negation | * Negation find ! -name "*.avi" -not -name "*.mp*g" | ||
* Sucht Dateien die von der Dateiendung weder '''avi''', noch '''mpg''' oder '''mpeg''' sind | * Sucht Dateien die von der Dateiendung weder '''avi''', noch '''mpg''' oder '''mpeg''' sind | ||
* Ausrufezeichen und ''-not'' sind gleichbedeutend | * Ausrufezeichen und ''-not'' sind gleichbedeutend | ||
; | ; Klammerung | ||
Bei umfangreichen Kombinationen kann eine Klammerung erforderlich sein, um das gewünschte Resultat zu erhalten | Bei umfangreichen Kombinationen kann eine Klammerung erforderlich sein, um das gewünschte Resultat zu erhalten | ||
; | ; ohne Klammern | ||
find -name "susi.*" -or -name "susanne.*" -name "*.txt" | find -name "susi.*" -or -name "susanne.*" -name "*.txt" | ||
* Ohne Klammern wird erst die UND-Verbindung gebildet, also "susanne.*" und "*.txt", danach erst ODER "susi". '''susi.png''' würde also gefunden | * Ohne Klammern wird erst die UND-Verbindung gebildet, also "susanne.*" und "*.txt", danach erst ODER "susi". '''susi.png''' würde also gefunden | ||
; | ; mit Klammern | ||
find \( -name "susi.*" -or -name "susanne.*" \) -name "*.txt" | find \( -name "susi.*" -or -name "susanne.*" \) -name "*.txt" | ||
* Klammern müssen maskiert werden | * Klammern müssen maskiert werden | ||
* Hier wird jetzt für alle Dateien erfordert, dass diese auf .txt enden | * Hier wird jetzt für alle Dateien erfordert, dass diese auf .txt enden | ||
; | ; Beispiel | ||
Suche nach ausführbaren Dateien (keine Verzeichnisse), die »user« gehören '''find . -maxdepth 1 \! -type d -a -perm +111 -a -user user''' | Suche nach ausführbaren Dateien (keine Verzeichnisse), die »user« gehören '''find . -maxdepth 1 \! -type d -a -perm +111 -a -user user''' ./.xinitrc ./.xsession ./dialog ./selfeditor.pl | ||
'''Erläuterung'''* Die Suche wurde auf das aktuelle Verzeichnis beschränkt "-maxdepth 1" | '''Erläuterung'''* Die Suche wurde auf das aktuelle Verzeichnis beschränkt "-maxdepth 1" | ||
* Verzeichnisse ausgeschlossen "\! -type d" (das "!" ist ein Sonderzeichen der Shell, deswegen muss die Auswertung durch die Shell verhindert werden) | * Verzeichnisse ausgeschlossen "\! -type d" (das "!" ist ein Sonderzeichen der Shell, deswegen muss die Auswertung durch die Shell verhindert werden) | ||
* Es sollen alle Dateien gefunden werden, bei denen mindestens in einer [../../../F:%5Cebooks%5CLinux%5CEinführungen%5Clinuxfibel%5Ceigentum.htm Rechtegruppe] das x-Flag gesetzt ist "-perm +111" und die »user» gehören "-user user" | * Es sollen alle Dateien gefunden werden, bei denen mindestens in einer [../../../F:%5Cebooks%5CLinux%5CEinführungen%5Clinuxfibel%5Ceigentum.htm Rechtegruppe] das x-Flag gesetzt ist "-perm +111" und die »user» gehören "-user user" | ||
* Die Suchkriterien sind jeweils per UND zu verknüpfen | * Die Suchkriterien sind jeweils per UND zu verknüpfen | ||
* Da find rekursiv alle Unterverzeichnisse (eventuell bis zu einer bestimmten Tiefe) durchsucht, kann die Ausführung sehr langwierig werden | * Da find rekursiv alle Unterverzeichnisse (eventuell bis zu einer bestimmten Tiefe) durchsucht, kann die Ausführung sehr langwierig werden | ||
Aktuelle Version vom 23. Dezember 2024, 14:29 Uhr
Anwendungen
Alle Dateien im aktuellen und allen Unterverzeichnissen (rekursiv)
$ find
Alle Dateien und Verzeichnissen im Unterverzeichnis foo des aktuellen Verzeichnisses
$ find foo
Suchbereich
Startverzeichnis
Suche alle Dateien und Verzeichnisse im übergeordneten Verzeichnis
$ find ../
Suche in einem ganz anderen Verzeichnis beginnen (im absoluten Pfad /tmp)
$ find /tmp
Suche in zwei Verzeichnissen (sucht sowohl in /tmp als auch in /boot)
$ find /tmp /boot
Suche ab root (/)
$ find /
- Sucht im Wurzelverzeichnis alle Dateien und alle Unterverzeichnisse
- das kann je nach Größe des Dateisystems und der gemounteten Dateisysteme dauern
Verzeichnistiefe
Sie können die Ergebnisse von find mit der Option -maxdepth einschränken
- Wenn Sie zum Beispiel jede JavaScript-Datei in Ihrem Wordpress-Verzeichnis finden wollen, würden Sie Folgendes verwenden:
find wordpress -name '*js'
Was aber, wenn Sie nur sehen wollen, ob es JavaScript-Dateien im obersten Verzeichnis gibt?
- Das können Sie mit -maxdepth einschränken: find wordpress -maxdepth 1 -name '*js'
- Damit wird nur das wordpress-Verzeichnis durchsucht, nicht aber die Unterverzeichnisse
- Eine Änderung von -maxdepth auf 2 würde Unterverzeichnisse im wordpress-Verzeichnis durchsuchen, aber deren Unterverzeichnisse ausschließen
$ find -maxdepth 3
steigt bei der Suche nur 3 Verzeichnisebenen herab
- -depth
bearbeitet den Inhalt jedes Verzeichnisses vor dem Verzeichnis selbst
- -maxdepth Ebenen
steigt bis zu der gegebenen Zahl von Ebenen im Verzeichnisbaum auf (in der Hierarchie ab); bei 0 Ebenen werden die Tests nur auf die in der Kommandozeile übergebenen Dateien und Verzeichnisnamen angewandt
- -maxdepth <n>
Suche nach Dateien, die sich maximal n Verzeichnisebenen unter dem angegebenen Verzeichnis befinden
- -mindepth Ebenen
steigt mindestens die gegebene Zahl von Ebenen im Verzeichnisbaum auf (in der Hierarchie ab); bei einer Ebene werden die in der Kommandozeile genannten Dateien und Verzeichnisnamen nicht bearbeitet
- -mindepth <n>
Gehe mindestens <n> Verzeichnisebenen unter das angegebene Verzeichnis zurück, bevor die Suche gestartet wird
- Verzeichnisse ausschließen
Symbolische Links
Die Optionen -H, -L und -P bestimmen den Umgang mit symbolischen Links
- Darauf folgende Kommandozeilenparamter müssen die Datei- oder Verzeichnisnamen sein, die untersucht werden sollen
- Das erste Argument, das mit einem -, einer Klammer (, ), einem Komma , oder einem Ausrufezeichen ! beginnt, wird als Anfang eines Ausdrucks interpretiert, der bestimmt, wonach gesucht wird
- Alle Argumente davor werden als Verzeichnisnamen angesehen
- Wenn kein Verzeichnis angegeben ist, wird das aktuelle Verzeichnis genommen
- Wenn keine Aktion angegeben ist, wird die Aktion -print ausgeführt (es wird stattdessen empfohlen -print0 zu 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 werden die Informationen von dem symbolischen Link selbst verwendet
- -L
Symbolischen Links folgen
- Wenn find eine Datei untersucht oder Informationen über diese ausgibt, dann werden die Informationen von der Datei verwendet, auf die der symbolische Link verweist (es sei denn, der Link ist kaputt oder find nicht in der Lage ist, 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 zeigen
- Wenn -L aktiv ist und find einen symbolischen Link zu einem Unterverzeichnis während seiner Suche findet, wird das Unterverzeichnis durchsucht, auf das der symbolische Link zeigt
- Wenn die Option -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 logisch falsch zurückliefern
- -H
Keinen symbolischen Links folgen, es sei denn …* ...die Parameter in der Kommandozeile werden ausgewertet
- Wenn find Dateien auswertet oder Informationen über diese ausgibt, werden die verwendeten Informationen vom symbolischen Link selbst benutzt werden
- Die einzige Ausnahme dieses Verhaltens ist, wenn eine in der Kommandozeile 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
- Die Informationen über den Link selbst dienen als Fall-Back für den Fall, dass die Datei, auf die der Link zeigt, nicht untersucht werden kann
- Wenn -H aktiv ist und einer der Pfade in der Kommandozeile ein symbolischer Link zu einem Verzeichnis ist, werden die Inhalte dieses Verzeichnisses untersucht (wobei natürlich -maxdepth 0 das verhindern kann)
- -follow
Veraltet
- Verwenden Sie die Option -L stattdessen
- Dereferenziert symbolische Links
- Impliziert -noleaf
- 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 aufgeszählt sind, werden dereferenziert, wenn es sich bei ihnen um symbolische Links handelt
- Das gleiche gilt für -anewer und -cnewer
- Genauso 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 logisch falsch zurückliefern
Dateisysteme
- -xdev
durchsucht keine Verzeichnisse in anderen Dateisystemen/Partitionen
- -fstype Typ
die Datei ist in einem Dateisystem vom angegebenen Typ; unter anderem werden minix, msdos, ext und proc erkannt
Dateiname
Mit vollständigem Namen find -name hausarbeit.odt
- Sucht die Datei hausarbeit.odt im aktuellen Verzeichnis und allen Unterverzeichnissen
- Sind mehrere Dateien dieses Namens vorhanden, werden alle Fundstellen aufgelistet
- Jokerzeichen, Wildcards, wie der *</nowiki> oder das ? müssen maskiert werden, sonst interpretiert sie schon die Shell
- find -name "*.pdf"
- Sucht im aktuellen Verzeichnis nach PDF-Dateien. -name berücksichtigt die Groß-/Kleinschreibung bei der Suche, findet also mit obigen Beispiel keine Datei(en) mit Endung *.PDF</nowiki>
- Das *</nowiki> steht für eine beliebige Anzahl Zeichen
- find -iname "a*.pdf"
- Sucht im aktuellen Verzeichnis nach .pdf- und .PDF-Dateien, die mit a oder A beginnen. find -name "katze.*"
- findet katze.jpg, katze.png, katze.txt und so weiter find -name "katze.??g"
- findet katze.jpg, katze.png und so weiter Jedes Fragezeichen steht für ein einzelnes Zeichen
- find -name "*foo*.*x*"
- findet foo.x, afoo.x, foob.txt und so weiter
- -name <Muster>
Finde Dateien, deren Name <Muster> entspricht
- Mit dieser Option wird <Muster> wie ein Suchmuster behandelt (siehe Kapitel Suchmuster und Reguläre Ausdrücke)
- -iname <Muster>
Findet Dateien mit Name, wie -name, ignoriert jedoch Groß- und Kleinschreibung
- -path Name
Findet Dateien mit Name, wobei Name auch Pfadangaben enthalten kann ("*/include/*.h")
- Sucht man mit Verzeichnisnamen, in denen ein Schrägstrich '/' vorkommt, kommt man mit '-name' nicht weiter
- Der Parameter '-path' ist hier die Lösung, denn er erlaubt die Interpretation des Zeichens '/'. find -path "*2013/J*"
- findet ~/fotos/2013/Juni und ~/musik/2013/Juli, aber nicht ~/dokumente/2013-Juni
Reguläre Ausdrücke
find hat nicht nur einfach RegEx-Support, es beherrscht auch mehrere unterschiedliche Arten der RegEx-Syntax
- Mit -regextype und eine der unterstützten Arten wie posix-awk, posix-egrep, kannst du den Typ wählen
- Lies unter man find nach, welche Arten unterstüzt werden
- Ein kurze Beispiel
- Sagen wir ich suche alle Dateien die entweder eine .php oder .js Endung
- Ich könnte das folgende laufen lassen:
- find -regextype posix-egrep -regex '.*(php|js)$'* die egrep-Syntax -regextype posix-egrep zu benutzen und hinten kommt der Reguläre Ausdruck nach dem gesucht wird
- Der Ausdruck beginnt und endet mit einem Hochkomma, damit die Shell nicht versucht die RegEx auszuwerten
- Der Ausdruck .* ist ein Joker und bedeute „ein oder mehr beliebige Zeichen“. (php|js) weist an nach php oder js zu suchen
- Die Pipe (|) steht hier für "oder"
- Das Dollarzeichen "$" hinten weist an, den Ausdruck am Ende eines Strings zu suchen
- Also trifft etwa eine Datei namens js.txt nicht auf die Abfrage zu
- -regex Muster
Wie "-name", nur kann das Muster reguläre Ausdrücke enthalten
- -regex Muster
der Pfadname passt zu dem regulären Ausdruck Muster
- -regex <Muster>
Wie -name, jedoch wird hier Muster als regulärer Ausdruck behandelt
- -iregex Muster
Wie „-regex“ jedoch ohne Groß-/keinschreibung zu beachten
- -iregex <Muster>
Wie -regex, ignoriert aber Groß- und Kleinschreibung
- -regextype type
Ändert die Syntax der regulären Ausdrücke, die von -regex und -iregex verstanden werden
- Folgende Typen sind implementiert: emacs (Standard), posix-awk, posix-basic, posix-egrep und posix-extende
Dateitypen
- -type C
die Datei ist vom Typ C; folgende Typen werden unterschieden:
- b gepufferte Gerätedatei für ein blockorientiertes Gerät
- c ungepufferte Gerätedatei für ein zeichenorientiertes Gerät
- d Verzeichnis
- p benannte Pipeline (FiFo)
- f normale Datei
- l symbolischer Link
- s Socket
Suche nach einem bestimmten Dateityp <Typ> kann folgende Werte annehmen: f (reguläre Datei), d (Verzeichnis), l (symbolischer Verweis), s (Socket), b (Blockdatei), c (Zeichendatei) oder p (benannte Umleitung)
b | |
c | |
d | |
p | |
f | |
l | |
s |
- Finde nur Dateien
$ find -type f
- Das f steht für 'files'
- Findet keine Verzeichnisse, aber alle herkömmlichen Dateien in allen Unterverzeichnissen
- Finde nur Verzeichnisse
$ find -type d
- Das d steht für 'directories'
- Findet alle Unterverzeichnisse, aber keine sonstigen Dateien
- -xtype C
das gleiche wie -type für alle Dateien, die keine symbolischen Links sind
- wenn die Datei ein symbolischer Link ist und die Option -follow nicht gesetzt ist, wird die Datei, auf die der Link zeigt, auf den Typ C geprüft
- wenn die Option -follow gesetzt ist, ist der Test wahr, wenn C = l ist
Zeitstempel
Datum/Zeit
- Dateien nach Zeitstempeln suchen
-amin N | auf die Datei ist vor N Minuten zugegriffen worden |
-anewer Referenzdatei | auf die Datei ist vor weniger Zeit zugegriffen worden, als seit der letzten Veränderung der Referenzdatei vergangen ist |
-atime N | auf die Datei ist vor N*24 Stunden zugegriffen worden |
-cmin N | der Status der Datei wurde vor N Minuten geändert |
-cnewer Referenzdatei | der Status der Datei wurde vor weniger Zeit verändert, als seit der letzten Veränderung der Referenzdatei vergangen ist |
-ctime N | der Dateistatus wurde vor N*24 Stunden geändert |
-mmin N | der Inhalt der Datei wurde vor N Minuten verändert |
-mtime N | der Inhalt der Datei wurde vor N*24 Stunden verändert |
-newer Referenzdatei | die Datei ist später verändert worden als die Referenzdatei |
- Argumente N
+ N | wird interpretiert "alle Zahlen größer als N" |
- N | wird interpretiert "alle Zahlen kleiner als N" |
N | wird interpretiert "genau N" |
- Beispiele
$ find /tmp ! -type d -atime +20 -user USER1 2>/dev/null
findet unterhalb /tmp alle Dateien die kein Verzeichnis sind und seit über 20 Tagen nicht mehr angefasst wurden und dem Benutzer USER1 gehören
$ find /home/USER1 -type f -mmin -20 -user USER1
findet alle normalen Dateien unterhalb vom Homeverzeichnis von USER1 die innerhalb der letzten 20 Minuten geändert wurden und dem User USER1 gehören
$ find /etc -cnewer /etc/fstab 2>/dev/null
findet alle Dateien unterhalb /etc deren ctime nach der letzten Änderung (mtime) der /etc/fstab geändert wurde
- Zeitstempel von Dateien
siehe Linux/Datei:Zeitstempel
- Tage
$ find -mtime -365
- Sucht nach Dateien, deren Inhalt innerhalb der letzten 365 Tage geändert wurde (mtime = modification time)
- Weitere Optionen sind * ctime (change time): Zeitpunkt, an dem der Status der Datei geändert wurde (Name, Rechte)
- atime (access time): Zeitpunkt an dem auf die Datei zugegriffen wurde
- Ein Dateilisting selbst ist damit nicht gemeint
- Bei Bilddateien zählt die Vorschaufunktion eines grafischen Dateimanagers aber bereits als Zugriff
- Auch hier gibt es, ähnlich wie bei der Größe, Mindestalter (+), Höchstalter (-) und genaues Alter
- -newer Referenzdatei
die Datei ist später verändert worden als die Referenzdatei; zusammen mit -follow tritt -newer nur in Effekt, wenn -follow vor -newer in der Kommandozeile steht
- -used N
auf die Datei ist N Tage nach der letzten Änderung zugegriffen worden
- -atime Tage
Findet Dateien, auf die vor Tagen zugegriffen wurden (zur Angabe von Bereichen siehe Option "amin")
- -atime <n>, -amin <n>
Finde Dateien, auf die zuletzt vor <n> Tagen (-atime) oder <n> Minuten (-amin) zugegriffen wurde
- Sie können auch +<n> oder -<n> spezifizieren
- Dann wird nach Dateien gesucht, auf die vor höchstens, oder mindestens <n> Tagen, oder Minuten zugegriffen wurde
- -atime N
auf die Datei ist vor N*24 Stunden zugegriffen worden
- -anewer Referenzdatei
auf die Datei ist vor weniger Zeit zugegriffen worden, als seit der letzten Veränderung der Referenzdatei vergangen ist; im Zusammenhang mit -follow tritt -anewer nur in Effekt, wenn -follow vor -anewer in der Kommandozeile steht
- -anewer <Datei>
Findet Dateien auf die später zugegriffen wurde als auf Datei <Datei>
- -amin Minuten
Findet Dateien, auf die vor Minuten zugegriffen wurden
- Um bspw
- alle Dateien zu finden, deren Zugriff vor 2 bis 8 Minuten geschah, können die Angaben kombiniert werden: "-amin +2 -amin -8"
- -amin N
auf die Datei ist vor N Minuten zugegriffen worden
- Minuten
Sometimes you need to look for files modified in the last day or so, and the previous options are a bit too broad for that
- The good news is that find also has the -amin, -cmin, and -mmin, which are similar to the other options but they work with minutes rather than days
- So if you want to look for something that was changed or accessed in the last day, you can use those options
- find -amin -5
- nach Dateien suchen, auf die in den letzten 5 Minuten zugegriffen wurde
- Analog: -cmin, -mmin
- Alle Dateien, auf die in der letzten Minute zugegriffen wurde
Um die nachfolgende Suche erfolgreich enden zu lassen, manipulieren wir mit Hilfe von "touch" die Zugriffszeiten einiger Dateien touch sax* find . -amin 1 . ./saxsys.tgz ./sax_logo.gif
- -ctime <n>, -cmin <n>, -cnewer <Datei>
Genau wie -atime, -amin und -anewer, doch in Bezug auf die letzte Inhaltsänderung der Datei
- -ctime N
der Dateistatus wurde vor N*24 Stunden geändert
- -cmin N
der Status der Datei wurde vor N Minuten geändert
- -cnewer Referenzdatei
der Status der Datei wurde vor weniger Zeit verändert, als seit der letzten Veränderung der Referenzdatei vergangen ist; zusammen mit -follow tritt -cnewer nur in Effekt, wenn -follow vor -cnewer in der Kommandozeile steht
- Vergleich $ find -cnewer /tmp/referenz
- Nach Dateien suchen, die nach der Referenzdatei geändert wurden
- Mit touch --date='15:00' /tmp/referenz erstellt man sich eine Referenzdatei, wenn man keine hat
- -mtime Tage
Findet Dateien, die vor Tagen geändert wurden (zur Angabe von Bereichen siehe Option »amin«)
- -mtime N
der Inhalt der Datei wurde vor IN*24 Stunden verändert
- -mmin N
der Inhalt der Datei wurde vor N Minuten verändert
- -daystart
misst die Zeiten für die -amin, -atime, -cmin, -ctime, -mmin und -mtime Eigenschaften vom Beginn des aktuellen Tages anstelle der letzten 24 Stunden
- Diese Option betrifft nur die Tests, die weiter hinten in der Kommandozeile geschrieben sind
- Werden zeit-bezogene Tests durchgeführt (siehe unten), wird der Beginn des aktuellen Tages als Zeitstempel genommen (und nicht der Zeitpunkt vor 24 Stunden, was der Standard-Einstellung entspricht)
Größe
Manchmal ist es nützlich, andere Attribute zur Suche zu verwenden
- Etwa Dateien nach Größe zu finden
- Ein gutes Beispiel: du arbeitest mit einem Server und stellst fest, dass eine der Partitionen beginnt, voll zu werden
- Um welche Datei, oder Dateien, handelt es sich? Mit find suchst du Dateien nach Größe und kannst dich dann darum kümmern, Platz zu schaffen
- Die Option um nach Größe zu prüfen ist -size, gefolgt von der Größenangabe, nach der du suchst
- Du kannst alle möglichen Einheiten angeben, von Blöcken (b) bis Gigabytes (G)
- Um Dateien der Größe 100 kB zu finden, gibst du ein: find -size 100k
- Damit werden alle Dateien der Größe 100 kB gefunden
- Das ist ziemlich speziell
- Um größere oder kleinere Dateien einer bestimmten Größe zu finden, verwendest du + oder - zusätzlich zur Zahl
- Also sollte find -size +100k alle Dateien größer als 100 kB zurückgeben
- Und find -size -100k alles was kleiner ist
- Mit dem -empty-Parameter kannst du auch leere Dateien finden: find -empty -type -f
- Beachte, dass ich eine zusätzliche Prüfung für den Typ der Datei verwende
- Ohne diese Option wird find Verzeichnisse als „leere Dateien“ anzeigen
- -size Number[Einheit]
Findet Dateien einer bestimmten Dateigröße
- In der Voreinstellung ist die »Einheit« 512 Byte große Blöcke, das heißt, bei Number=1 werden alle Dateien mit einer Größe zwischen 1 und 512 Bytes gefunden
- Als Einheit kann stehen: b für 512 Byte-Blöcke (Voreinstellung), c für 1 Byte-Blöcke, k für Kilobyte-Blöcke und w für 2 Byte-Blöcke
- Maximale Größe
find -size -100c -ls
- Nach Dateien suchen, die bis zu 100 Bytes belegen
- Das - vor der Zahl bedeutet "bis zu"
- Das c hinter der Zahl bedeutet character, welche früher 1 Byte belegten, aber b ist schon für die Maßeinheit Block (= 512 Bytes) vergeben
- Mittels -ls läßt sich die Größe der gefundenen Dateien überprüfen
- Deswegen wird es hier, vor den anderen Aktionen, erwähnt
- Exakte Größe
find -size 100c -ls
- nach Dateien suchen, die genau 100 Bytes groß sind (kein Vorzeichen)
- Mindestgröße
find -size +100M
- Nach Dateien suchen, die 100 Megabytes oder größer sind (Vorzeichen +)
- Statt M kann man auch k und G für Kilobytes und Gigabytes angeben
- Zwischen Mindest- und Maximalgröße
find -type f -size +64c -size -4096c | wc -l
- Nur nach Dateien suchen, die zwischen 64 und 4096 Bytes groß sind, und per Pipe an wc übergeben, um die Anzahl der gefundenen Dateien zu bestimmen
- Blockgröße
find -size 10
- Ohne Angabe zur Maßeinheit wird die Zahl als Anzahl Blöcke interpretiert, hier also nach 10 Blöcken à 512 Bytes
- Die Angabe b ist gleich bedeutend
- Wenn es Probleme mit der Größe gibt, dann wahrscheinlich, weil man c oder k oder M vergessen hast
- Leeren Dateien
Leere Verzeichnisse und Dateien der Größe 0 find -empty
- -empty
die reguläre Datei oder das Verzeichnis ist leer
- "size N[{c,k}]"
die Datei belegt N Datenblöcke zu 512 Bytes, oder N Bytes und N Kilobytes mit nachgestelltem c oder k
Besitzer und Gruppe
$ find / -user BENUTZERNAME
- Dateien nach Benutzer suchen
Ein weiterer nützlicher Einsatz von find ist es, Dateien nach Besitzerstatus zu lokalisieren, sogar Dateien mit fehlendem Besitzer
- Schauen wir uns das mal an
- Wenn du Dateien zwischen Systemen verschoben hast, oder wenn du Benutzer entfernt hast, hast du möglicherweise verwaiste Dateien
- Um solche zu finden nimmst du: find -nouser
- Um Dateien, die tatsächlich im Besitz eines bestimmten Benutzers sind, zu finden, nimmst du die -user oder -uid Optionen
- Die -uid Option erlaubt dir nach der nummerischen User-ID (UID) zu suchen und -user erlaubt dir nach Name oder UID zu suchen
- Also wenn ich alle meine Dateien in einem Verzeichnis finden will benutze ich find -user jzb
- Oder ich könnte find -user 1000 oder find -uid 1000 eingeben
- Vielleicht suchst du die Dateien die Benutzer A oder B gehören
- Das kannst du erreichen indem du den Operator -o hinzufügst: find -user root -o -user www-data
- Damit werden alle Dateien gefunden die Benutzer root oder www-data gehören
- Wenn du umgekehrt alle Dateien finden möchtest die nicht dem bestimmten Benutzer gehören, nimmst du den -not-Operator: find -not -user www-data
- Natürlich funktioniert -not auch zusammen mit anderen Optionen
- Du könntest nach allen Dateien suchen die einem Benutzer gehören, die nicht mehr als eine bestimmte Größe haben
- Beispiel: find -user www-data -not -size +100k
- -user Nutzer
Findet Dateien des "Nutzers" (UID oder Nutzername)
- Alle Dateien im Verzeichnis /tmp, die »user« gehören
find /tmp/ -user user 2>/dev/null /tmp/kfm-cache-500 /tmp/kfm-cache-500/index.html /tmp/kfm-cache-500/index.txt /tmp/acout.1364.NHKnJh /tmp/acin.1364.c36auh
- Dateien nach Gruppen suchen (-group)
Eine weitere Möglichkeit, nach Dateien zu suchen ist nach Gruppe, mit der -group-Option
- Diese Option arbeitet mit einem Gruppennamen oder einer Gruppen-ID (GID)
- Die grundlegende Syntax ist find -group groupname
- Können mit anderen Operatoren kombiniert werden, um zum Beispiel Dateien eines Benutzers zu finden, die auch zu einer bestimmten Gruppe gehören.s
- -user Name
die Datei gehört dem Anwender Name
- -uid N
die Kennziffer des Eigentümers ist N
- -gid N
die Datei gehört der Gruppe mit der Kennzahl N
- -group Name
die Datei gehört der Gruppe Name
- -nouser
die Datei gehört keinem im System eingetragenen Benutzer
- -nogroup
die Datei gehört keiner im System angemeldeten Gruppe
Zugriffsrecht
Gelegentlich möchtest du dein Dateisystem nach Dateien überprüfen, die global beschreibbar sind, oder sonstige „falsche“ Berechtigungen haben
- Das find-Werkzeug unterstützt dies mit mehreren verschiedenen Optionen
- Am einfachsten sind die Operatoren -readable, -writable, und -executable
- Diese prüfen die Berechtigungen des aktuell angemeldeten Benutzers, der find aufruft
- Beachte, dass diese Optionen in älteren Versionen von find nicht verfügbar sind
- Also wenn deine Distribution etwas älter ist hast du diese Optionen eventuell noch nicht
- Ein andere Option nach der Dateiberechtigung zu suchen ist die Benutzung von -perm, was nach dem aktuellen Dateistatus schaut
- Auf diese Art kannst du sehen ob eine Datei mit einer bestimmten Kombination von Berechtigungen übereinstimmt
- Zum Beispiel wenn du sehen willst welche Dateien von Benutzer und Gruppe ausführbar sind, nimmst du: find -type f -perm -110
- Die 110 sagt find „Schau nach Dateien das Ausführen-Bit für Benutzer und Gruppe gesetzt haben!“ und das - sagt find die anderen Bit zu ignorieren
- Das heißt, es spielt keine Rolle, wenn die Datei auch beschreibbar oder lesbar ist, solange die Bit gesetzt sind, die sie ausführbar machen
- Um die Suche auf Dateien einzuschränken, die exakt dem angegeben Staus entsprechen, benutzt du nicht den - -Operator
Was, wenn du nach Dateien suchst die das Ausführen-Bit für Benutzer oder Gruppe haben? Dann nimmst du / statt - :
$ find -type f -perm /110
Jede Datei, die die Gruppen- oder Eigentümer-Berechtigung hat, wird gefunden
- Suchen nach Berechtigung kann überaus hilfreich sein, aber auch komplex
- Es kann etwas dauern um die Syntax zu verstehen, besonders für die, die noch nicht mit dem Eigentümer/Berechtigung-Konzept vertraut sind
- In diesem Fall ist das Lesen der man-Seiten nicht nur empfehlenswert, sondern unerlässlich
- -perm Modus
Findet Dateien, deren Rechte exakt dem angegebenem Modus entsprechen (Angabe numerisch oder symbolisch)
- die Zugriffsrechte auf die Datei entsprechen exakt dem Modus; der Modus kann als Oktalzahl oder mit den bei chmod(1) beschriebenen Kennungen beschrieben werden, die Kennungen werden auf Modus 000bezogen
- -perm –Modus
Findet Dateien, bei denen mindestens die durch Modus angegebenen Rechteflags gesetzt sind
(mindestens) die Zugriffsrechte für den Modus sind gesetzt
- -perm +Modus
Findet Dateien, bei denen mindestens eines der durch Modus angegebenen Rechteflags gesetzt ist
- die Zugriffsrechte entsprechen höchstens dem Modus (oder sind weiter eingeschränkt)
Links
- -links Anzahl
Findet Dateien, auf die Anzahl fester Links zeigen
- Dateien im Verzeichnis /usr mit 43 harten Links
find /usr/ -links 43 2>/dev/null /usr/include /usr/share
In den Ausgaben wurden die Fehler nach "/dev/null" verschoben, da find natürlich nur Verzeichnisse unter die Lupe nimmt, zu dessen Zugang der Benutzer berechtigt ist
- -lname Muster
die Datei ist ein symbolischer Link auf eine Datei oder ein Verzeichnis mit einem zum Muster passenden Namen
- -inum IN
die Datei belegt die Inode mit der Nummer N
- find all the hard links
A common request is a way to find all the hard links to some file
- Using “ls ‑li 'file” will tell you how many hard links the file has, and the inode number
- You can locate all pathnames to this file with:
find mount-point -xdev -inum inode-number
- Since hard links are restricted to a single filesystem, you need to search that whole filesystem so you start the search at the filesystem's mount point. (This is likely to be either “/home” or “/” for files in your home directory.)
- The “‑xdev” option tells find to not search (descend into) any other filesystems
- While most Unix and all Linux systems have a find command that supports the “‑inum” criterion, this isn't POSIX standard
- Older Unix systems provided the “ncheck” utility instead that could be used for this
Bedingungen verknüpfen
find hält logische Operatoren bereit, um verschiedene Kriterien miteinander zu verknüpfen
- Tests kombinieren
- <c1> -a <c2>: Wahr, wenn beide, <c1> und <c2>, wahr sind. -a wird bereits implizit aktiviert, daher brauchen Sie nur <c1> <c2> <c3>
- eingeben, wenn Sie alle Tests <c1>, <c2>,
- durchführen möchten
- <c1> -o <c2>: Wahr, wenn entweder <c1>, <c2> oder beide wahr sind. -o hat eine geringere Wertigkeit als -a
- Wenn Sie also Dateien möchten, die Kriterium <c1> oder <c2> und Kriterium <c3> entsprechen, müssen Sie Klammern verwenden: ( <c1>-o <c2> ) -a <c3>
- Damit die hier verwendeten Klammern nicht von Ihrer Shell interpretiert werden, müssen Sie sie durch Voranstellen eines Rückstriches (\) schützen
- -not <c1>: Invertiert den Test <c1>
- Also ist -not <c1> wahr, wenn <c1> falsch ist
- Operatoren
Die Optionen, Tests und Aktionen können mit Operatoren verknüpft werden
- Die Bearbeitung erfolgt von links nach rechts
( Ausdruck ) | die Klammern fassen den Ausdruck zu einer Operation zusammen |
! Ausdruck | ist wahr, wenn der Ausdruck falsch ist |
-not Ausdruck | ist ebenfalls wahr, wenn der Ausdruck falsch ist |
Ausdruck1 Ausdruck2 | UND Verknüpfung; wenn Ausdruck1 wahr ist, wird Ausdruck2 bewertet (ausgeführt) |
Ausdruck1 -a Ausdruck2 | auch eine UND Verknüpfung |
Ausdruck1 -and Ausdruck2 | auch eine UND Verknüpfung |
Ausdruck1 -o Ausdruck2 | ODER Verknüpfung; Ausdruck2 wird bewertet (ausgeführt), wenn Ausdruck1 falsch ist |
Ausdruck1 -or Ausdruck2 | auch eine ODER Verknüpfung |
Ausdruck1 , Ausdruck2 | Liste; beide Ausdrücke werden immer bewertet (ausgeführt); der Wahrheitswert des gesamten Ausdrucks entspricht dem von Ausdruck2 |
- Und-Kombination
Treffer müssen alle Kriterien erfüllen find -mindepth 3 -maxdepth 5
- Finde ab Unterverzeichnis(se) 3 (mindepth 3) UND bis Unterverzeichnis(se) 5 (-maxdepth 5)
- Weiters Beispiel der UND-Kombination
find -mindepth 3 -type f -name "*.avi" -size +5M
- Beginnt die Suche ab Unterverzeichnis(se) 3 (-mindepth 3), UND findet nur gewöhnliche Dateien (‑type f), die die Endung .avi besitzen UND mindestens 5 MB groß sind (-size +5M)
- Oder-Kombination
find -name "susi.*" -or -name "susanne.*"
- Sucht alle Dateien die mit "susi." ODER "susanne." beginnen
- ODER oder NICHT-Kombination
Man kann die Suchoptionen aber auch per ODER oder NICHT verknüpfen:
- Negation find ! -name "*.avi" -not -name "*.mp*g"
- Sucht Dateien die von der Dateiendung weder avi, noch mpg oder mpeg sind
- Ausrufezeichen und -not sind gleichbedeutend
- Klammerung
Bei umfangreichen Kombinationen kann eine Klammerung erforderlich sein, um das gewünschte Resultat zu erhalten
- ohne Klammern
find -name "susi.*" -or -name "susanne.*" -name "*.txt"
- Ohne Klammern wird erst die UND-Verbindung gebildet, also "susanne.*" und "*.txt", danach erst ODER "susi". susi.png würde also gefunden
- mit Klammern
find \( -name "susi.*" -or -name "susanne.*" \) -name "*.txt"
- Klammern müssen maskiert werden
- Hier wird jetzt für alle Dateien erfordert, dass diese auf .txt enden
- Beispiel
Suche nach ausführbaren Dateien (keine Verzeichnisse), die »user« gehören find . -maxdepth 1 \! -type d -a -perm +111 -a -user user ./.xinitrc ./.xsession ./dialog ./selfeditor.pl
Erläuterung* Die Suche wurde auf das aktuelle Verzeichnis beschränkt "-maxdepth 1"
- Verzeichnisse ausgeschlossen "\! -type d" (das "!" ist ein Sonderzeichen der Shell, deswegen muss die Auswertung durch die Shell verhindert werden)
- Es sollen alle Dateien gefunden werden, bei denen mindestens in einer [../../../F:%5Cebooks%5CLinux%5CEinführungen%5Clinuxfibel%5Ceigentum.htm Rechtegruppe] das x-Flag gesetzt ist "-perm +111" und die »user» gehören "-user user"
- Die Suchkriterien sind jeweils per UND zu verknüpfen
- Da find rekursiv alle Unterverzeichnisse (eventuell bis zu einer bestimmten Tiefe) durchsucht, kann die Ausführung sehr langwierig werden