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.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ä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.
  • Coole Tools schnelle Tipper
  • Korner: KCron
    Warum selber an Aufgaben denken, die zu einem bestimmten Zeitpunkt ausgeführt werden sollen, wenn einem hilfreiche Programme wie der Cron-Daemon diese Arbeit gern abnehmen? Mit der grafische Oberfläche KCron legen Sie fest, was wann zu erledigen ist.
Kommentare

Infos zur Publikation

LU 11/2014: VIDEOS BEARBEITEN

Digitale Ausgabe: Preis € 4,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

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

Tipp der Woche

Schnell Multi-Boot-Medien mit MultiCD erstellen
Schnell Multi-Boot-Medien mit MultiCD erstellen
Tim Schürmann, 24.06.2014 12:40, 0 Kommentare

Wer mehrere nützliche Live-Systeme auf eine DVD brennen möchte, kommt mit den Startmedienerstellern der Distributionen nicht besonders weit: Diese ...

Aktuelle Fragen

Artikelsuche
Erwin Ruitenberg, 09.10.2014 07:51, 1 Antworten
Ich habe seit einige Jahre ein Dugisub LinuxUser. Dann weiß ich das irgendwann ein bestimmtes Art...
Windows 8 startet nur mit externer Festplatte
Anne La, 10.09.2014 17:25, 4 Antworten
Hallo Leute, also, ich bin auf folgendes Problem gestoßen: Ich habe Ubuntu 14.04 auf meiner...
Videoüberwachung mit Zoneminder
Heinz Becker, 10.08.2014 17:57, 0 Antworten
Hallo, ich habe den ZONEMINDER erfolgreich installiert. Das Bild erscheint jedoch nicht,...
internes Wlan und USB-Wlan-Srick
Gerhard Blobner, 04.08.2014 15:20, 2 Antworten
Hallo Linux-Forum: ich bin ein neuer Linux-User (ca. 25 Jahre Windows) und bin von WIN 8 auf Mint...
Server antwortet mit falschem Namen
oin notna, 21.07.2014 19:13, 1 Antworten
Hallo liebe Community, Ich habe mit Apache einen Server aufgesetzt. Soweit, so gut. Im Heimnet...