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

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
(143 Punkte bei 5 Stimmen)
Google schmeißt Jabber raus ...
(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.

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 "{}" ";"
Einem Freund empfehlen    Druckansicht Bookmark and Share
Kommentare

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