Find/Anwendungen: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
|||
Zeile 7: | Zeile 7: | ||
=== Suchbereich === | === Suchbereich === | ||
[[Find/Anwendungen/Suchbereich]] | |||
=== Dateiname === | === Dateiname === |
Version vom 13. September 2025, 12:44 Uhr
Anwendungen
Alle Dateien im aktuellen und allen Unterverzeichnissen (rekursiv)
$ find
Alle Dateien und Verzeichnissen im Unterverzeichnis foo des aktuellen Verzeichnisses
$ find foo
Suchbereich
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
Dateityp | Beschreibung |
---|---|
b | Blockorientiertes Gerät |
c | Zeichenorientiertes Gerät |
d | Verzeichnis |
p | Benannte Pipeline (FiFo) |
f | Normale Datei |
l | Symbolischer Link |
s | Socket |
- 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
- 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 filesystems 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 isnt 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