Home / LinuxUser / 2005 / 05 / Dateisuche mit find und locate

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.

Aufmacher Artikel

Spürnasen

Dateisuche mit find und locate

01.05.2005 Für jeden Zweck das Richtige: Die Suchwerkzeuge <C>find<C> und <C>locate<C> arbeiten Hand in Hand, <C>which<C> und <C>whereis<C> helfen bei besonderen Aufgaben.

Chaotische Zustände beherrschen viele Home-Verzeichnisse. Im selbst für deren Schöpfer meist kaum noch nachvollziehbaren Wirrwarr verstrickter Verzeichnisstrukturen eine bestimmte Datei zu finden erfordert mehr als einen Dateimanager. Das klassische Unix-Werkzeug zu diesem Zweck heißt find. Es fahndet nicht nur nach namentlich bekannten Dateien, sondern berücksichtigt darüber hinaus Kriterien wie Zugriffszeiten oder Berechtigungen. Assistiert wird find vom schnellen locate und den spezialisierten Werkzeugen which und whereis.

Spürhund ohne Erbarmen

Als Parameter verlangt der find-Befehl den Namen des zu durchsuchenden Verzeichnisses gefolgt von den Suchbedingungen:

find /home/user -name datei.txt

Als Suchbedingungen kennt find Dateinamen, -größe und -typ, Zugriffsrechte und Besitzer sowie Datum der letzten Veränderung und des letzten Zugriffs. Diese Kriterien lassen sich beliebig kombinieren.

Suchen Sie eine Datei mit einem bestimmten Namen unterhalb eines Verzeichnisses, benötigen Sie nur den Parameter -name:

find . -name index.tex

Dieses Kommando unterscheidet Linux-typisch zwischen Groß- und Kleinschreibung. Obiges Beispiel wird also eine Datei Index.tex nicht als Treffer werten. Dieses Verhalten heben Sie auf, indem Sie statt -name den Parameter -iname verwenden:

find /usr/local/ -iname index.tex

Dieser Aufruf findet sowohl die Dateien index.tex als auch INDEX.tex oder InDeX.tex unterhalb von /usr/local/. Wildcards helfen beim Aufspüren von Dateien mit ähnlichen Namen (Kasten 1):

find . -name index*

Kasten 1: Wildcards

Einige Sonderzeichen fungieren als Platzhalter für andere Ziffern oder Buchstaben. So steht das Fragezeichen für genau ein beliebiges Zeichen; index.te? trifft beispielsweise für index.tex oder index.te3 zu, nicht aber für index.tex3.

Eine beliebige Anzahl von Zeichen repräsentiert der Stern (engl.: "asterisk"). Der Ausdruck *tex liefert alle Dateien zurück, die auf tex enden, also sowohl index.tex als auch nur tex.

Buchstaben- oder Ziffernbereiche decken Sie mit Hilfe eckiger Klammern ab: Der Ausdruck [abd] steht für die Kleinbuchstaben a, b und d. Den Bereich von a bis d im Alphabet repräsentiert [a-d]. Analog funktioniert dies mit Ziffern, beispielsweise von 4 bis 8: [4-8].

Um find nach Dateien mit einer bestimmten Dateigröße suchen zu lassen, existiert die Suchbedingung -size. Standardmäßig bezieht sich der Wert der darauf folgenden Angabe auf die Anzahl der von der Datei belegten Blöcke im Dateisystem, die üblicherweise 512 Byte groß sind. Jedoch lassen sich auch alltäglichere Einheiten wie Byte und KByte verwenden. Hängen Sie dazu c bzw. k an die Dateigröße an. Bei einem vorangestellten + oder - sucht find nicht nur Dateien mit exakt der angegebenen Größe, sondern verwendet diese Zahl als Minimal- bzw. Maximalwert:

find . -size +100k -name dokument.ps

Dieser Befehl gibt alle Dateien des Namens dokument.ps unterhalb des aktuellen Verzeichnisses aus, wenn sie mindestens 100 KBytes groß sind. Die weiteren Suchfunktionen folgen demselben Prinzip (Tabelle 1).

Tabelle 1: Suchbedingungen von Find

-name dateiname Sucht Dateien des Namens dateiname.
-iname dateiname Sucht nach dateiname und ignoriert Groß- und Kleinschreibung.
-size [+-]groesse[ck] Sucht Dateien, die größer oder kleiner als groesse sind. c steht für Byte- und k für KByte-Werte. Ohne Einheitsangabe wird nach der Anzahl der belegten Blöcke (512 Byte) gesucht.
-type [fdl] Sucht Dateien eines bestimmten Typs: f für einfache Dateien, d für Verzeichnisse und l für symbolische Links.
-atime [+-]zeit Sucht Dateien, auf die seit mehr oder weniger als zeit Tagen nicht mehr zugegriffen wurde.
-amin [+-]zeit Sucht Dateien, auf die seit mehr oder weniger als zeit Minuten nicht mehr zugegriffen wurde.
-mtime [+-]zeit Sucht Dateien, die seit mehr oder weniger als zeit Tagen nicht mehr verändert wurden.
-mmin [+-]zeit Sucht Dateien, die seit mehr oder weniger als zeit Minuten nicht mehr verändert wurden.
-perm 0000 Sucht Dateien mit den den Zugriffsrechten 0000 (Oktalzahl).
-user benutzername Sucht Dateien des Benutzers benutzername.
-exec befehl "{}" ";" Führt befehl mit den gefunden Dateien als Parameter aus. Die geschweiften Klammern stehen für den aktuell gefunden Dateinamen.
-ok befehl "{}" ";" Führt befehl nach Rückfrage aus.

Gefunde Dateien ausführen

Als Werkzeug mit fast unbegrenzten Möglichkeite entpuppt sich find, wenn es Dateien nicht nur sucht, sondern mit den Treffern direkt beliebige Befehle ausführt. Diesen Zweck erfüllt der Parameter -exec zusammen mit den geschweiften Klammern {} und dem Semikolon (;). Der Ausdruck {} steht dabei für jede gefundene Datei, das Semikolon schließt einen Befehl ab und darf daher am Ende des -exec-Aufrufs nicht fehlen. Beide müssen jeweils zwischen Anführungszeichen stehen, damit die Shell sie als find-eigene Parameter erkennt.

Ebenso wie -exec funktioniert der Aufruf der Alternative -ok. Der Unterschied besteht darin, dass find mit --ok bei jeder Aktion vor dem Ausführen um Bestätigung bittet. Dieser Parameter empfiehlt sich also bei eventuell destruktiven Aktionen wie dem Löschen oder Verschieben von Dateien.

Die folgende Anweisung sucht alle Dateien unterhalb des aktuellen Verzeichnisses, die auf .txt enden, dem Benutzer namens bauni gehören und höchstens sieben Tage alt sind. Den Inhalt der gefundenen Dateien gibt nach Rückfrage der Befehl cat nacheinander auf der Kommandozeile aus.

find . -name "*.txt" -user bauni -atime -7 -ok cat "{}" ";"
Tip a friend    Druckansicht Bookmark and Share
Kommentare

5830 Hits
Wertung: 89 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...