[Home]
[Vorwort]
[Danksagungen]
[Autoren]
[Programme - eine kurze Übersicht]
[Tips & Tricks]
[Links zu anderen Linux-Seiten]
[mail an den Autor]
Letzte Änderung dieser Seite: 31.01.03
[find]
[KDE Wallpaper]
[Befehl]
find
[Beschreibung]
Auffinden von Dateien
[Syntax]
"find /Verzeichnisbaum/in/dem/gesucht/werden/soll/ -name Dateiname.txt -print"
[Erklärung]
Dem Befehl "find" folgt das zu durchsuchende Verzeichnis
(im einfachsten Fall "/" um das gesamte Dateisystem, also alle gemounteten Datenträger, zu durchsuchen).
Dann folgt "-name" womit "find" angewiesen wird nach einer Datei mit einem bestimmten Namen zu suchen. (hier nach "Dateiname.txt")
Schließlich folgt mit "-print" noch die Anweisung, das Ergebnis auf der Konsole auszugeben. Zwar funktioniert das obige Beispiel auch genauso ohne die "-print" Anweisung,
aber im unteren Bereich dieser Seite wird noch ein Beispiel auftauchen, bei dem das Fehlen dieser letzten Anweisung die Ausgabe verhindert.
[Tip]
Auch "find" kann mit Joker-Zeichen also Stellvertreterzeichen arbeiten. Die bekanntesten sind
* (für 0 bis n beliebige Zeichen) und
? (für genau ein beliebiges Zeichen)
Allerdings müssen Jokerzeichen "maskiert" werden, da sonst nach Dateien mit eben diesen Zeichen (z.B. dem Sternchen) gesucht werden.
Dies geschieht durch ein vorrangestelltes Backslash oder das Anführungszeichen vor und hinter dem (gesamten!) Ausdruck.
[Beispiel]
Benutzer "Anne" will in ihrem Heimatverzeichnis alle Dateien mit der Endung "jpg" finden.
find /home/anne/ -name \*jpg
oder
find /home/anne/ -name "*jpg"
Anne kann natürlich auch statt dem Pfad zu Ihrem Heimatverzeichnis auch " $HOME "einsetzen
find $HOME -name "*jpg"
[Tip]
Sicher weisst Du, dass Linux bei Dateinamen zwischen Gross- und Kleinschreibung unterscheidet.
Obiges Beispiel wuerde also nur nach Dateien mit der Endung " jpg "suchen,
nicht aber nach " JPG " oder " jPg ".
Um " find " anzuweisen, Gross- und Kleinschreibung zu ignorieren,
ändere die Option " -name " in " -iname "
[Beispiel]
find $HOME -iname "*jpg"
[Tip]
Du hast eine oder mehrere riesige Festplatten und eine Suche nach einer oder mehreren Dateien würde ewig dauern.
Nun, womöglich gibt es ja einige Verzeichnisse, von denen Du sicher bist, daß Gesuchtes dort ganz sicher nicht ist....
[Szenario]
gesucht werden Dateien die mit "info" beginnen und mit "doc" enden.
Ob groß oder klein geschrieben ist nicht bekannt. Wo im Verzeichnisbaum ist ebenfalls ungeklärt,
allerdings befinden sich die Dateien auf keinen Fall in den Verzeichnissen "/data/musik", "/movie" oder "/cdrom"
[Suche]
find / -path /data/musik -prune -o -path /movie -prune -o -path /cdrom -prune -o -iname info\*doc -print
oder auch kürzer
find / \( -path /data/musik -o -path /movie -o -path /cdrom\) -prune -o -iname "info*doc" -print
[Erklärung]
find bekommt als zu durchsuchenden Pfad "/" übergeben,
dann werden nach einander die Pfade, die nicht durchsucht werden sollen (durch die Umkehrfunktion "-prune"), angegeben.
Schließlich taucht immer wieder die Option "-o" (für oder) auf, diese zeigt an, daß nachfolgend eine weitere Option und kein Parameter angegeben ist.
Na und den rest kennst du ja.
Im 2. Beispiel ist das Ergebnis genau das gleiche, nur daß eben alle auszuschließenden Pfade gesammelt aufgelistet sind und durch "-prune" nur einmal gemeinsam von "wahr" in "falsch" gewandelt werden müssen.
ACHTUNG !!!
Bei den auszuschließenden Pfaden ( z.B. "/cdrom") sollte kein abschliessendes "/" gesetzt werden.
Sonst wird zwar der angegebene Pfad, nicht aber dessen Unterverzeichnisse von der Suche ausgeschlossen.
Das heißt. z.B. im Verzeichnis "/cdrom" wird nicht gesucht aber in den vorhandenen Unterverzeichnissen von "/cdrom/".
(Obwohl, vielleicht ist ja manchmal genau das das Gewünschte)
[Nachtrag]
Ach ja, natürlich können statt Verzeichnissen auch Dateien von der Suche ausgeschlossen werden.
find / \( -name cache\*txt -o -name temp\*txt -o -name tmp\*txt \) -prune -o -name *txt
In diesem Beispiel wird im gesamten Dateisystem nach Dateien mit der Endung "txt" gesucht.
Allerdings werden alle diese Dateien, die mit "cache", "tmp" oder "temp" beginnen, ignoriert.