Home / LinuxUser / 2000 / 06 / Zu Befehl

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

Eingedost
(161 Punkte bei 4 Stimmen)
Aufteiler
(161 Punkte bei 4 Stimmen)

Heftarchiv

LinuxUser Heftarchiv

EasyLinux Heftarchiv

Ubuntu User Heftarchiv

Ubuntu User Heftarchiv

Partner-Links:

Das B2B Portal www.Linx.de informiert über Produkte und Dienstleistungen.

Zu_Befehl.png

Gesucht, gefunden – find

Zu Befehl

01.06.2000 Auch wenn sich viele Dinge bequem über grafische Oberflächen wie KDE oder GNOME regeln lassen – wer sein Linux-System richtig ausreizen möchte, kommt um die Kommandozeile nicht herum. Abgesehen davon gibt es auch sonst viele Situationen, wo es gut ist, sich im Befehlszeilendschungel ein wenig auszukennen.

Manchmal kann man sich in seinen eigenen Verzeichnissen und Dateien wie in einem Labyrinth verirren, da ist guter Rat teuer. Wie findet man bloß diese LaTeX-Datei von vorgestern wieder? Und wo sind nur wieder die Zip-Archive vom letzten Download hingeraten? Wenn die Kommandoaufrufe auch manchmal etwas kryptisch sind – find ist Dein Freund!

"… 8, 9, 10 – ich komme!"

Mit dem Befehl find findet man Dateien wieder – man kann verschiedene Suchkriterien angeben, wie z.B. Dateinamen, -größe, das Datum der Erstellung oder des letzten Zugriffs. Ein Blick in die man-Page zeigt, dass es unzählige Anwendungen für diesen Befehl gibt. Damit die Verwirrung nicht allzu groß wird, stellen wir hier die wichtigsten Optionen vor.

Tippt man einfach nur find, werden alle Dateien im aktuellen Verzeichnis und in allen Unterverzeichnissen gefunden. Sucht man dagegen nach einer ganz bestimmten Datei, lautet der Aufruf find -name dateiname. Wildcardssind möglich – allerdings muss dann der abgekürzte Dateiname in Apostrophen angegeben werden: find -name '*.tex' sucht alle Dateien, die mit .tex enden.

Auch die Option -type dateityp macht das Suchen und Finden oft leichter. Wenn man find -type f (für "file") verwendet, werden reguläre Dateien gesucht, -d (für "directories") sucht nach Verzeichnissen und -l nach Links.

GNU is not UNIX

Vorsicht auf anderen Unix-Systemen – der Aufruf von find sieht meistens etwas anders aus. Man muss dem Befehl schon sagen, wo er suchen soll, d.h. eine Pfadangabe ist unbedingt notwendig. Auch die Option -print sollte zusätzlich zum einfachen Aufruf verwendet werden, sonst wird gesucht, aber das Ergebnis nicht angezeigt. Beim GNU-find ist dieser Parameter die Standardeinstellung, sofern nicht mit -exec ein Kommando ausgeführt wird.

Möchte man nicht, dass alle Unterverzeichnisse durchsucht werden, kann man die Tiefe des durchsuchten Verzeichnisbaumes durch die Option -maxdepth levelanzahl einschränken. Der Aufruf find -maxdepth 1 bewirkt also, dass keine Unterverzeichnisse mehr berücksichtigt werden. Standardmäßig folgt find keinen durch Symlinks referenzierten Verzeichnissen. Will man auch solche durchsuchen, verwendet man den Parameter find -follow.

Noch spezieller, bitte!

Mit dem Befehl find lässt sich prima auch nach komplizierteren Dingen suchen. Hier kommt die gesamte Palette des Dateisystems zum Einsatz. Da man mit find immer nur die äußere Hülle der Dateien (also nicht ihren Inhalt) betrachtet, braucht man verschiedene Möglichkeiten, Dateiattribute anzugeben.

Ein Kriterium, nach dem man suchen kann, ist unter anderem die Zeit der letzten Veränderung. Mit dem Aufruf find - n kann man Dateien finden, die das letzte Mal vor genau n Tagen verändert wurden. Weiß man den Tag nicht mehr ganz so genau, kann man ein + oder ein - vor das n stellen: find -ctime +n sucht Dateien, die älter als n Tage sind, find -ctime -n Dateien, die entsprechend jünger sind.

Dateien, die einer bestimmten Gruppe von Usern gehören, kann man mit der Option -group gruppenname suchen, mit -user username werden Dateien gefunden, die einem bestimmten Benutzer gehören. Wird hingegen der Parameter -nogroup oder -nouser angehängt, werden nur solche Files gefunden, die keinem gültigen Benutzer oder keiner Gruppe des Systems (mehr) zuzuordnen sind.

Möchte man eine Einschränkung in der Dateigröße vergeben, verwendet man einfach die Option -size groesse. Die Angabe der groesse bezieht sich auf die Anzahl der Blöcke, die die Datei im Filesystem belegt, meistens sind diese 512 Byte groß. Auch hier kann man wieder mit dem + oder - Zeichen den Spielraum nach oben oder unten erweitern. Ein zusätzliches c oder k angehängt heißt, dass die Größe in Byte oder kByte angegeben wurde. Beispiel: find -size +5k findet Dateien, die größer als 5 kByte sind.

Der Parameter -path suchmuster bietet zusätzlich zur Suche nach Dateinamen, wie bei -name, die Möglichkeit, den Namen inklusive Pfad zu spezifizieren. find /home/huhn/ -path '*linux*/*.html' findet z.B. alle Dateien, die auf .html enden und in deren Pfad die Zeichenkette linux enthalten ist.

Spannend wird die Option -path in Zusammenhang mit dem Parameter -prune. Man sucht häufig nach Dateien, von denen man weiß, in welchem Verzeichnis sie ungefähr liegen könnten – aber man ist sich sicher, dass sie in gewissen Unterverzeichnissen auf keinen Fall liegen. Wer jemals in seinem Home-Verzeichnis nach GIF-Dateien gesucht hat, weiß, wovon ich rede.

huhn@huehnerstall ~ > find /home/huhn -path '*.netscape*' -prune -o -name '*.gif' -print

Das sieht schon recht kompliziert aus, aber gehen wir schrittweise vor. Im Home-Verzeichnis des Benutzers "Huhn" wird etwas gesucht, und zwar offenbar solche Objekte (Dateien / Verzeichnisse), deren Namen und Pfade die Zeichenkette .netscape enthalten. Das -prune bewirkt nun, dass von einem gefundenen Objekt der Dateibaum nicht weiter durchsucht wird. Für dieses Beispiel heißt das also, dass jedes Verzeichnis, das .netscape im Namen hat, übergangen wird. Für alle anderen greift nun der zweite Teil, hinter dem -o, d.h. von den verbleibenden Objekten werden diejenigen ausgegeben, die auf .gif enden.

Die gerade gezeigte Option -o sollte noch etwas näher betrachtet werden. Es handelt sich um einen ODER-Operator, der zwei Teilausdrücke verbindet. Es ist ein "entweder – oder", das versucht, den gesamten Ausdruck wahr zu machen. Ist der erste Teilausdruck schon wahr, so muss und wird der zweite Teilausdruck gar nicht mehr ausgeführt werden. Entsprechendes gilt für den AND-Operator -a: Hier wird der zweite Teilausdruck nicht ausgewertet, wenn der erste schon falsch war, da auch in diesem Fall der gesamte Ausdruck nicht mehr wahr werden kann.

Tip a friend    Druckansicht Bookmark and Share
Kommentare

2825 Hits
Wertung: 119 Punkte (7 Stimmen)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

LinuxUser 05/2014

Aktuelle Ausgabe kaufen:

Heft als PDF kaufen

LinuxUser erscheint monatlich und kostet in der Nomedia-Ausgabe EUR 5,95 und mit DVD EUR 8,50. Weitere Informationen zum Heft finden Sie auf der LinuxUser-Homepage.

Im LinuxUser-Probeabo erhalten Sie drei Ausgaben für 3 Euro. Das Jahresabo (ab EUR 60,60) können Sie im Medialinx-Shop bestellen.

Tipp der Woche

Bilder vergleichen mit diffimg
Bilder vergleichen mit diffimg
Tim Schürmann, 01.04.2014 12:40, 1 Kommentare

Das kleine Werkzeug diffimg kann zwei (scheinbar) identische Bilder miteinander vergleichen und die Unterschiede optisch hervorheben. Damit lassen sich nicht nur Rätsel a la „Orignial und Fäls...

Aktuelle Fragen

programm suche
Hans-Joachim Köpke, 13.04.2014 10:43, 8 Antworten
suche noch programme die zu windows gibt, die auch unter linux laufen bzw sich ähneln sozusagen a...
Funknetz (Web-Stick)
Hans-Joachim Köpke, 04.04.2014 07:31, 2 Antworten
Bei Windows7 brauche ich den Stick nur ins USB-Fach schieben dann erkennt Windows7 Automatisch, a...
Ubuntu 13.10 überschreibt immer Windows 8 Bootmanager
Thomas Weiss, 15.03.2014 19:20, 8 Antworten
Hallo Leute, ich hoffe das ich richtig bin. Ich habe einen Dell Insipron 660 Ich möchte gerne Ub...
USB-PTP-Class Kamera wird nicht erkannt (Windows-only)
Wimpy *, 14.03.2014 13:04, 15 Antworten
ich habe meiner Frau eine Digitalkamera, AGFA Optima 103, gekauft und wir sind sehr zufrieden dam...
Treiber
Michael Kristahn, 12.03.2014 08:28, 5 Antworten
Habe mir ein Scanner gebraucht gekauft von Canon CanoScan LiDE 70 kein Treiber wie bekomme ich de...