Der Befehl Find

iPhone-3

Mit dem Befehl find lassen sich unter Linux- bzw. UNIX-Systemen Suchen im Dateisystem durchführen. Die Suche kann dabei von beliebigen Startpunkten aus in ganzen Verzeichniszweigen erfolgen und mithilfe verschiedener Optionen auch gefiltert werden. Auf den gefundenen Dateien können außerdem Aktionen ausgeführt werden, die es ermöglichen, den Befehl mit vielen anderen Befehlen zu koppeln.

Sie lernen in diesem Beitrag die Grundlagen über die Verwendung des find Befehls, sowie die wichtigsten Optionen kennen.

Die Datei-/Verzeichnis-Suche mit find

Der find Befehl kann mit einer Vielzahl Optionen ausgeführt werden, um verschiedene Daten für die Suche heranzuziehen. Die allgemeine Syntax des Befehls lautet:

find [Startpunkt] [Optionen / Ausdruck]

Namen filtern

Für eine einfache Datei bzw. Verzeichnissuche benötigt der find Befehl lediglich einen Startpunkt gefolgt von den Suchbedingungen. Eine Suche nach einer Datei mit gegebenem Namen wird folgendermaßen durchgeführt:

find [Startpunkt] -name [Dateiname]

Es ist zu beachten, dass der Dateiname für die Suche exakt angegeben werden muss. Wird der Name einer Datei unvollständig oder ohne die dazugehörige Dateiendung angegeben, so wird find diese nicht finden können.

Im Folgenden werden einige Möglichkeiten erklärt, mit denen es möglich ist, eine dynamischere Suche durchzuführen.

Groß- und Kleinschreibung ignorieren

Anstelle von -name kann die Option -iname verwendet werden. Diese ermöglicht es, die Groß- und Kleinschreibung während der Suche zu ignorieren (ignore case):

find [Startpunkt] -iname [Dateiname]

Wildcards

Ist der Name oder auch die Dateiendung nicht vollständig bekannt, so kann mit sogenannten Wildcards gearbeitet werden, um den unbekannten Teil entsprechend mit einem Platzhalter zu versehen. Folgende Wildcards können mit find verwendet werden:

Operator​

Funktion

?

Exakt ein beliebiges Zeichen

*

Beliebige Zeichenkette (Beliebig viele beliebige Zeichen)

[]

Eines der Zeichen aus der Menge

Damit Wildcards nicht unbeabsichtigt von der Shell interpretiert werden, wird ihnen beispielsweise ein Backslash '\' vorangestellt, um sie zu maskieren. Alternativ kann auch einfach der gesamte Parameter mitsamt Wildcards mit Hochkommata ' eingefasst werden.

find [Startpunkt] -name '[Dateiname]'
Beispiel: Wildcards 1

Code:

find /home/ -name '*.txt'

Bedeutung:

Der Befehl sucht nach allen Dateien im Verzeichnis /home/ (und Unterverzeichnissen), die die Dateiendung .txt haben bzw. auf '.txt' enden.

Beispiel: Wildcards 2

Code:

find /home/ -name '*edv*'

Bedeutung:

Hierbei wird nach Elementen gesucht, die das Wort 'edv' an beliebiger Stelle in ihrem Namen stehen haben.

Dateigrößen filtern

Mit der Option -size kann auch die Kapazität von Dateien für die Suche bzw. das Filtern verwendet werden:

find [Startpunkt] -size [+-][Kapazität][ck]

Der Kapazitäts-Angabe kann ein '+' oder '-' vorangestellt werden, damit find diese als Minimal- ('+') bzw. Maximalwert ('-') verwendet. Das '+' steht also für "größer als" und das '-' für "kleiner als". Die Einheit kann durch Anhängen von 'c' (Byte) oder 'k' (KiloByte) gewählt werden. Wird keine Einheit angehängt, so bezieht sich der angegebene Wert auf die Anzahl belegter Blöcke im Dateisystem.

Beispiel: -size

Code:

find ./ -size +50k

Bedeutung:

Hierbei werden alle Dateien im aktuellen Verzeichnis (und Unterverzeichnissen) gesucht, die eine Kapazität größer als 50 KiloByte haben.

Zeiten filtern

Letzte Zugriffszeit

Mit -atime bzw. -amin lassen sich Dateien mithilfe ihrer letzten Zugriffszeit filtern. Dabei wird -atime verwendet, um Dateien zu suchen, auf die seit mehr ('+') oder weniger ('-') als der angegebenen Anzahl Tagen nicht zugegriffen wurde.

find [Startpunkt] -atime [+-][Tage]

Die Option -amin verhält sich ähnlich wie -atime, jedoch werden hier Minuten anstelle von Tagen angegeben:

find [Startpunkt] -amin [+-][Minuten]
Beispiel: -atime

Befehl:

find /home/hellberg/ -atime -2

Bedeutung:

Hier werden alle Dateien im Verzeichnis /home/hellberg/ gesucht, auf die seit weniger als 2 Tagen nicht zugegriffen wurde.

Beispiel: -amin

Befehl:

find /home/hellberg/ -amin +30

Bedeutung:

Hier werden alle Dateien im Verzeichnis /home/hellberg/ gesucht, auf die seit mehr als 30 Minuten nicht zugegriffen wurde.

Letzte Änderungszeit

Mit -mtime bzw. -mmin lässt sich eine Suche nach der letzten Änderungszeit durchführen. Diese Optionen verhalten sich komplett analog zu -atime bzw. -amin. Die Syntax für -mtime lautet also:

find [Startpunkt] -mtime [+-][Tage]

-mmin wird schließlich folgendermaßen verwendet:

find [Startpunkt] -mmin [+-][Minuten]
Beispiel: -mtime

Befehl:

find /home/hellberg/ -mtime +7

Bedeutung:

Hier werden alle Dateien im Verzeichnis /home/hellberg/ gesucht, die seit mehr als 7 Tagen nicht verändert wurden.

Beispiel: -mmin

Befehl:

find /home/hellberg/ -mmin -60

Bedeutung:

Hier werden alle Dateien im Verzeichnis /home/hellberg/ gesucht, die seit weniger als 60 Minuten nicht verändert wurden.

Zugriffsrechte filtern

Wenn bei der Suche nur Dateien mit bestimmten Zugriffsrechten ausgegeben werden sollen, dann wird die Option -perm angewendet:

find [Startpunkt] -perm [Zugriffsrechte als Oktalzahl]

Die Zugriffsrechte werden in der Darstellung als Oktalzahl angegeben. Näheres zum Linux-Berechtigungssystem und dieser Schreibweise können Sie auch in unserem dazugehörigen Beitrag nachlesen.

Benutzernamen filtern

Auch eine Suche nach Dateien mit einem bestimmten besitzenden Benutzer ist möglich. Hier kommt die -user Option zum Einsatz:

find [Startpunkt] -user [Benutzername]

Falls Sie weitere Informationen über Benutzer (und Gruppen) unter Linux bzw. UNIX-Systemen erfahren wollen, dann können Sie auch dies in unserem Beitrag zu diesem Thema nachlesen.

Typen filtern

Mit -type ist es möglich, nach bestimmten Typen zu suchen. Die wichtigsten Parameter sind hierbei 'f' ("File") für einfache Dateien, 'd' ("Directory") für Verzeichnisse und 'l' ("Link") für symbolische Links.

find [Startpunkt] -type [fdl]

Ausführen von Befehlen auf Dateien

Zuletzt soll nun noch einmal auf eine der mächtigsten Funktionen von find eingegangen werden. Dabei handelt es sich um die Option -exec. Die Option ermöglicht es, find nicht nur für die einfache Dateisuche anzuwenden, sondern auch direkt Befehle auf den Suchtreffern auszuführen. So können beispielsweise die Zugriffsrechte von Dateien, die einem bestimmten Kriterium entsprechen, verändert werden. Es sind aber noch viele weitere Anwendungsfälle denkbar.

Die Syntax des find Befehls mit der -exec Option lautet grundsätzlich folgendermaßen:

find [Startpunkt] [Optionen] -exec [Befehl] {} \;

Mit den geschweiften Klammern '{}' werden die jeweiligen Suchtreffer von find als Parameter an den mit -exec angefügten Befehl übergeben. Das Semikolon ';' schließt den Befehl dann ab. Damit das Semikolon richtig interpretiert werden kann, wird es außerdem mit einem Backslash '\' maskiert.

Es folgen einige Beispiele.

Beispiel: -exec cat

Befehl:

find /var/www/ -name '*.html' -exec cat {} \;

Bedeutung:

Hier werden alle Dateien im Verzeichnis /var/www/ gesucht, die auf ".html" enden. Anschließend wird der Inhalt jeder Datei ausgegeben, indem der Befehl cat auf ihnen ausgeführt wird.

Beispiel: -exec chmod

Befehl:

find ./* -type f -exec chmod 664 {} \;

Bedeutung:

Der Befehl sucht alle Dateien ('-type f') im aktuellen Verzeichnis (und Unterverzeichnissen) und führt jeweils den Befehl chmod auf den Treffern aus, um die Zugriffsrechte auf '664' zu stellen.

Das Video zu diesem Beitrag

Abonniere JETZT unseren Newsletter!


Verpasse nie wieder neue Beiträge und exklusive Insider-Only-Inhalte!

Joel Benseler

Click Here to Leave a Comment Below

Leave a Comment: