Home / LinuxUser / 2000 / 06 / Zu Befehl

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

„Klickbunt auf dem Server? Warum nicht, wenn's hilft!"
(220 Punkte bei 8 Stimmen)
KDE 4.10.2, Gnome 3.6 und mehr
(121 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.

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.

Einem Freund empfehlen    Druckansicht Bookmark and Share
Kommentare

2437 Hits
Wertung: 119 Punkte (7 Stimmen)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

title_2013_06

Aktuelle Ausgabe kaufen:

Heft bestellen 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

Emacs als Psychologe
Emacs als Psychologe
Tim Schürmann, 21.05.2013 11:49, 0 Kommentare

Wer beim Schreiben in Emacs nicht mehr weiter weiß oder schier an einer Programmieraufgabe verzweifelt, der kann den eingebauten Psychologen um Rat fragen.

1966 entwickelte der Infor...

Aktuelle Fragen

Kontakt via QR code hinzufügen
Herman Sproesser, 17.05.2013 17:46, 3 Antworten
Hi hab in der aktuellen ausgabe 06.2013 den artikel über QR Codes gelesen. Ich hab nartürlich...
Dateimanager Dolphin, wo legt er die Datei Kommentare ab?
Uwe Heine, 16.05.2013 15:19, 1 Antworten
Suse Linux 12.1 - KDE 4.7.2 / Dolphin 1.7. Ich habe bei vielen Dateien über Dolphin Kommentare...
wie baut man Kernel Module so, dass sie mit jedem Kernel laden?
GoaSkin , 22.04.2013 10:22, 1 Antworten
Hallo, baut man anhand eines Kernel-Sources Module, nutzt Linux im Normalfall eine strikte V...
Problem beim Installieren von SuSe 12.3
Georg Prokert, 14.04.2013 00:04, 16 Antworten
Hallo, auf meinem neuem Laptop (Acer Aspire V3-771, Intel Core i5-3230 M, Intel HD Graphics 4...
lvm wieder loswerden
Peter Dibbern, 11.04.2013 16:28, 4 Antworten
Ich habe sämtliche alten Kisten ausgeschlachtet und aus der Teilen einen Rechner zusammengeschrau...