Zu_Befehl.png

Zu Befehl

Gesucht, gefunden – find

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.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Zu Befehl
    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.
  • Spürnasen
    Für jeden Zweck das Richtige: Die Suchwerkzeuge find und locate arbeiten Hand in Hand, which und whereis helfen bei besonderen Aufgaben.
  • Suchen im Dateisystem
    Mehr als hunderttausend Dateien liegen in einem gut ausgestatteten Linux-System. Im eigene Home-Verzeichnis tummeln sich oft nicht weniger. Diverse Tools zur Dateisuche helfen, sich im Datendschungel zurecht zu finden.
  • Shell-Skripte mit grafischen Dialogen
    Dass sich Shell-Programmierung und grafische Oberflächen nicht ausschließen, zeigt KDialog: Nie war es leichter, Shell-Skripte um User-Interaktion zu ergänzen.
  • Zutritt erlaubt!
    Ein ausgefeiltes Benutzer- und Rechtesystem regelt unter Linux präzise, wer Zugriff worauf erhält. Die Besitzverhältnisse regeln Sie auf der Kommandozeile mit den Werkzeugen Chmod, Chgrp und Chown an.
Kommentare

Infos zur Publikation

LU 12/2016: Neue Desktops

Digitale Ausgabe: Preis € 5,99
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Aktuelle Fragen

Drucker Epson XP-332 unter ubuntu 14.04 einrichten
Andrea Wagenblast, 30.11.2016 22:07, 2 Antworten
Hallo, habe vergeblich versucht mein Multifunktionsgerät Epson XP-332 als neuen Drucker unter...
Apricity Gnome unter Win 10 via VirtualBox
André Driesel, 30.11.2016 06:28, 2 Antworten
Halo Leute, ich versuche hier schon seit mehreren Tagen Apricity OS Gnome via VirtualBox zum l...
EYE of Gnome
FRank Schubert, 15.11.2016 20:06, 2 Antworten
Hallo, EOG öffnet Fotos nur in der Größenordnung 4000 × 3000 Pixel. Größere Fotos werden nic...
Kamera mit Notebook koppeln
Karl Spiegel, 12.11.2016 15:02, 2 Antworten
Hi, Fotografen ich werde eine SONY alpha 77ii bekommen, und möchte die LifeView-Möglichkeit nu...
Linux auf externe SSD installieren
Roland Seidl, 28.10.2016 20:44, 1 Antworten
Bin mit einem Mac unterwegs. Mac Mini 2012 i7. Würde gerne Linux parallel betreiben. Aber auf e...