Linux ist ein quell­of­fe­nes Be­triebs­sys­tem, das als freie Al­ter­na­ti­ve zu UNIX ge­schaf­fen wurde. Wie unter UNIX ist die Kom­man­do­zei­le ein grund­le­gen­des Tool bei der Arbeit mit Linux. Der Benutzer gibt auf der Kom­man­do­zei­le Linux-Befehle ein und führt diese aus.

Um unter Linux eine Datei zu finden, bedient man sich des Linux-find-Befehls. Dieser startet eine rekursive Suche, bei der eine Ver­zeich­nis-Hier­ar­chie be­stimm­ten Kriterien folgend durch­sucht wird. Der Linux-find-Befehl ist ein präzises Tool zum Finden von Dateien und Ver­zeich­nis­sen und wird auf so gut wie allen Linux-Dis­tri­bu­tio­nen von Hause aus un­ter­stützt.

KI-Assistent kostenlos – Ihr smarter All­tags­hel­fer
  • DSGVO-konform & sicher gehostet in Deutsch­land
  • Pro­duk­ti­vi­tät steigern – weniger Aufwand, mehr Output
  • Direkt im Browser starten – ohne In­stal­la­ti­on

Der Linux-find-Befehl im Überblick

Um unter Linux den find-Befehl zu nutzen, begeben wir uns auf die Kom­man­do­zei­le. Be­trach­ten wir das generelle Schema des Linux-find-Befehls:

find <verzeichnis_pfad> <such_parameter>
Hinweis

Achtung: Seien Sie vor­sich­tig mit Befehlen auf der Kom­man­do­zei­le. Wenn Sie unbedacht den falschen Befehl ausführen, können Sie u. U. Ihr System be­schä­di­gen!

Zunächst steht der Befehl selbst, gefolgt von einem Ver­zeich­nis-Pfad und einer variablen Anzahl von Such­pa­ra­me­tern. Ein Such­pa­ra­me­ter besteht aus einem Bin­de­strich, un­mit­tel­bar gefolgt vom Namen des Pa­ra­me­ters. Dahinter folgen ein Leer­zei­chen und der Wert des Pa­ra­me­ters. Hier eine Übersicht der am häu­figs­ten zum Einsatz kommenden Such­pa­ra­me­ter:

Such­pa­ra­me­ter Erklärung
-name, -iname Nach Da­tei­na­men filtern
-type Nach Dateityp filtern
-size, -empty Nach Da­tei­grö­ße filtern
-ctime, -mtime, -atime Nach Zeit­stem­pel filtern
-user, -group Nach Besitzer und Gruppe filtern
-perm Nach Da­tei­rech­ten filtern

Mehrere Such­pa­ra­me­ter lassen sich kom­bi­nie­ren. Dabei wird implizit von einer logischen UND-Ver­knüp­fung aus­ge­gan­gen. Diese lässt sich explizit aus­schrei­ben; ferner kann eine ODER-Ver­knüp­fung genutzt oder eine Bedingung negiert werden:

Such­pa­ra­me­ter Erklärung
-and Such­ergeb­nis­se müssen beiden Be­din­gun­gen ent­spre­chen
-or Such­ergeb­nis­se müssen min­des­tens einer der beiden Be­din­gun­gen ent­spre­chen
-not Nach­fol­gen­de Bedingung negieren

Beachten Sie, dass Sie in den folgenden Code-Bei­spie­len die <Platz­hal­ter> durch tat­säch­li­che Werte ersetzen müssen, um die Beispiele aus­zu­füh­ren.

Suche auf be­stimm­tes Ver­zeich­nis be­schrän­ken

Schauen wir uns zunächst an, wie wir die Suche auf ein be­stimm­tes Ver­zeich­nis begrenzen können. Um das aktuelle Ver­zeich­nis zu durch­su­chen, nutzen wir den Punkt '.' als Ver­zeich­nis-Pfad:

find . <such_parameter>

Um den eigenen Benutzer-Ordner zu durch­su­chen, nutzen wir die Tilde '~' als Ver­zeich­nis-Pfad:

find ~ <such_parameter>

Sie können mit dem Linux-find-Befehl auch das gesamte System durch­su­chen. Aufgrund der großen Menge an Dateien und der u. U. sehr tiefen Ver­zeich­nis-Hier­ar­chien kann dies jedoch sehr lange dauern. Um das gesamte System zu durch­su­chen, nutzen wir einen Vorwärts-Schräg­strich '/' als Ver­zeich­nis-Pfad:

find / <such_parameter>
Hinweis

Achtung: Seien Sie extrem vor­sich­tig, wenn Sie den Linux-find-Befehl in Kom­bi­na­ti­on mit dem '-exec'-Parameter auf das gesamte System anwenden!

Ausgabe der Such­ergeb­nis­se anpassen

Die Such­ergeb­nis­se des Linux-find-Befehls können u. U. sehr um­fang­reich sein. Es ist daher oft nützlich, die Dar­stel­lung der Er­geb­nis­se zu be­ein­flus­sen. Wir nutzen dafür keine eigenen Parameter des Befehls, sondern greifen auf so­ge­nann­te Pipes zurück. Diese dienen unter Linux dazu, die Ausgabe eines Befehls als Eingabe eines anderen Befehls zu nutzen.

Um die Er­geb­nis­se sei­ten­wei­se aus­zu­ge­ben, leiten wir die Ausgabe des find-Befehls an den less-Befehl weiter:

find <verzeichnis_pfad> <such_parameter> | less

Um die Anzahl der Er­geb­nis­se zu zählen, leiten wir die Ausgabe des find-Befehls an den wc-Befehl mit dem Parameter '-l' weiter:

find <verzeichnis_pfad> <such_parameter> | wc -l

Um uns nur die ersten bzw. letzten n Such­ergeb­nis­se aus­zu­ge­ben, leiten wir die Ausgabe des find-Befehls an die Befehle 'head' und 'tail' weiter. Dabei geben wir jeweils den Parameter '-n' gefolgt von der ge­wünsch­ten Anzahl von Such­ergeb­nis­sen an:

find <verzeichnis_pfad> <such_parameter> | head -n <anzahl>
find <verzeichnis_pfad> <such_parameter> | tail -n <anzahl>

Unter Linux Dateien finden: einfache An­wen­dungs­fäl­le

Die folgenden Beispiele be­schrän­ken die Suche auf das aktuelle Ver­zeich­nis und etwaige Un­ter­ver­zeich­nis­se. Nutzen Sie den cd-Befehl auf der Kom­man­do­zei­le, um zu einem be­lie­bi­gen Ver­zeich­nis zu wechseln. Um die Beispiele einfach aus­zu­pro­bie­ren, wechseln Sie zunächst in Ihren Be­nut­zer­ord­ner:

cd ~

Mit dem Linux-find-Befehl nach Da­tei­na­men filtern

Um nach Da­tei­na­men zu filtern, nutzen Sie den '-name'-Parameter. Dieser erwartet einen exakten Da­tei­na­men und un­ter­schei­det zwischen Groß- und Klein­schrei­bung:

find . -name <datei_name>

Hier suchen wir nach einer Datei mit dem exakten Namen '.gi­tigno­re':

find . -name .gitignore

Um nicht nach Groß- und Klein­schrei­bung zu un­ter­schei­den, nutzen wir den Parameter '-iname'. Das 'i' steht hierbei für „in­sen­si­ti­ve”, von „case-in­sen­si­ti­ve“, d. h. ohne Beachtung der Groß- und Klein­schrei­bung:

find . -iname <datei_name>

Für ge­wöhn­lich ist es prak­ti­scher, zuerst case-in­sen­si­ti­ve zu suchen und nur dann den '-name'-Parameter zu benutzen, wenn die Suche mit '-iname' zu viele Er­geb­nis­se liefert.

Möchten wir nicht nach einem exakten Da­tei­na­men suchen, sondern ein Muster nutzen, verwenden wir das Sternchen als „Wildcard“-Platz­hal­ter und schreiben das Such­mus­ter in An­füh­rungs­zei­chen (das Sternchen wird intern als „null bis beliebig viele weitere Zeichen“ in­ter­pre­tiert). Hier suchen wir nach Dateien und Ver­zeich­nis­sen, deren Name den Text „git“ enthält:

find . -iname "*git*"

Mit dem Linux-find-Befehl nach Dateityp filtern

Ein berühmter Aspekt der UNIX-Phi­lo­so­phie ist der Grundsatz „Alles ist eine Datei“; dies gilt auch unter Linux. Der Begriff „Datei“ ist hierbei weiter gefasst, als im um­gangs­sprach­li­chen Gebrauch üblich. So werden auch Ver­zeich­nis­se unter Linux wie Dateien ab­ge­bil­det – um Ver­wir­rung vor­zu­beu­gen, kommt manchmal auch der präzisere Begriff „Da­tei­deskrip­tor“ zum Einsatz.

Sprechen wir unter Linux von „Dateityp“, dann meinen wir damit nicht, ob es sich bei einem Dokument um eine Excel-Datei oder ein JPEG-Bild handelt. Statt­des­sen un­ter­schei­den wir die ver­schie­de­nen unter Linux exis­tie­ren­den Da­tei­deskrip­tor-Typen. Der Linux-find-Befehl stellt uns den Such­pa­ra­me­ter '-type' zur Verfügung, um nach Da­tei­ty­pen zu filtern. So können wir z. B. bei der Suche zwischen Dateien und Ver­zeich­nis­sen un­ter­schei­den. Hier eine Übersicht der am häu­figs­ten genutzten Da­tei­ty­pen:

Dateityp Erklärung
f Datei („File“)
d Ver­zeich­nis („Directory“)
l Sym­bo­li­scher Link („Link“)

Um nur Dateien in die Such­ergeb­nis­se auf­zu­neh­men, nutzen wir den '-type'-Parameter gefolgt vom Wert 'f':

find . -type f

Um nur Ver­zeich­nis­se in die Such­ergeb­nis­se auf­zu­neh­men, nutzen wir den '-type'-Parameter gefolgt vom Wert 'd':

find . -type d

Um nach der Da­tei­endung zu filtern, bedienen wir uns des '-iname'-Pa­ra­me­ters und nutzen das Sternchen als Wildcard-Platz­hal­ter.

Alle Dateien mit Er­wei­te­rung jpeg oder JPEG finden:

find . -type f -iname "*.jpeg"

Alle Dateien mit Er­wei­te­rung jpeg/JPEG oder jpg/JPG finden:

find . -type f -iname "*.jpeg" -or -iname "*.jpg"

Mit dem Linux-find-Befehl nach Größe filtern

Das Konzept der Datei unter Linux verknüpft mehrere In­for­ma­tio­nen. Dazu gehören für ge­wöhn­lich zumindest die folgenden:

  • Name
  • Dateityp
  • Da­tei­grö­ße
  • Zeit­stem­pel
  • Besitzer und Gruppe
  • Zu­griffs­rech­te

Nach all diesen lässt sich mit dem find-Befehl und den ent­spre­chen­den Pa­ra­me­tern filtern. Um nach der Größe einer Datei zu filtern, nutzen wir den '-size'-Parameter gefolgt von einer Grö­ßen­an­ga­be.

Der folgende find-Befehl liefert Dateien, die min­des­tens 700 Megabyte groß sind:

find . -size +700M
Hinweis

Die Filterung nach Größe funk­tio­niert nur für Dateien. Für Ver­zeich­nis­se ist im Da­tei­sys­tem keine Größe hin­ter­legt. Statt­des­sen wird die Größe bei Bedarf rekursiv errechnet.

Die Grö­ßen­an­ga­ben bestehen aus einer Zahl gefolgt von einer Einheit. Hier eine Übersicht der zur Verfügung stehenden Einheiten:

Einheit Erklärung
c Bytes
k Kilobytes
M Megabytes
G Gigabytes
b 512-byte blocks

Die Grö­ßen­an­ga­be wird als exakte Da­tei­grö­ße in­ter­pre­tiert. Dies ist selten prak­ti­ka­bel, da oft die genaue Größe einer gesuchten Datei nicht bekannt ist. Prak­ti­scher ist die Be­schrän­kung auf einen be­stimm­ten Grö­ßen­be­reich. Dafür wird der Zahl ein op­tio­na­ler Mo­di­fi­ka­tor vor­an­ge­stellt:

Mo­di­fi­ka­tor Erklärung
+ Datei ist größer als die an­ge­ge­be­ne Größe
- Datei ist kleiner als die an­ge­ge­be­ne Größe

Der folgende Befehl liefert Dateien, die kleiner als 500 Megabyte sind:

find . -size -500M

Der folgende Befehl liefert Dateien, deren Größe zwischen 400 und 500 Megabyte liegt:

find . -size +400M -and -size -500M

Neben der Angabe einer exakten Größe oder eines Grö­ßen­be­reichs gibt es mit '-empty' einen eigenen Parameter für die Suche nach leeren Dateien:

find . -type f -empty

Dies funk­tio­niert auch für Ver­zeich­nis­se:

find . -type d -empty

Mit dem Linux-find-Befehl nach Zeit­stem­peln filtern

Das Be­triebs­sys­tem verwaltet das Da­tei­sys­tem und pro­to­kol­liert die auf Dateien statt­fin­den­den Zugriffe. Dabei werden ver­schie­de­ne Zeit­stem­pel erzeugt. Linux legt Zeit­stem­pel für die Erzeugung, die letzte Änderung und den letzten Zugriff auf eine Datei an. Mit dem find-Befehl können wir nach diesen Zeit­stem­peln filtern. Hier eine Übersicht der dabei am häu­figs­ten zum Einsatz kommenden Such­pa­ra­me­ter:

Such­pa­ra­me­ter Erklärung
-ctime, -cmin Nach Datum der Erzeugung („Creation“) filtern
-mtime, -mmin Nach Datum der Änderung („Mo­di­fi­ca­ti­on“) filtern
-atime, -amin Nach Datum des Zugriffs („Access“) filtern

Um Dateien zu finden, die vor einem Tag verändert wurden, nutzen wir den Such­pa­ra­me­ter '-mtime', gefolgt vom Wert '1':

find . -type f -mtime 1

Die dar­ge­stell­ten Such­pa­ra­me­ter mit 'time' im Namen in­ter­pre­tie­ren den nach­fol­gen­den Wert als Anzahl von Tagen. Die Parameter mit 'min' im Namen in­ter­pre­tie­ren den nach­fol­gen­den Wert als Anzahl von Minuten.

Analog zum Filtern nach Da­tei­grö­ße können wir die Anzahl der ver­gan­ge­nen Tage auf einen Bereich be­schrän­ken. Dabei kommen wiederum das Plus- und Mi­nus­zei­chen als Mo­di­fi­ka­to­ren zum Einsatz:

Mo­di­fi­ka­tor Erklärung
+ Zeit­stem­pel liegt mehr Tage als angeben zurück
- Zeit­stem­pel liegt weniger Tage als angeben zurück

Um Dateien zu finden, die vor mehr als 100 Tagen erzeugt wurden, nutzen wir den Such­pa­ra­me­ter '-ctime', gefolgt vom Wert '+100':

find . -type f -ctime +100

Wie beim Filtern nach Da­tei­grö­ße lassen sich die Such­pa­ra­me­ter kom­bi­nie­ren, um einen Bereich ab­zu­de­cken. Um Dateien zu finden, deren Zugriff zwischen drei und fünf Tage zu­rück­liegt, nutzen wir zweimal den Such­pa­ra­me­ter '-atime', jeweils mit den Werten '+2' und '-6'. Die explizite Ver­knüp­fung über den '-and'-Parameter ist optional:

find . -type f -atime +2 -and -atime -6

Um Dateien zu finden, deren Änderung weniger als fünf Minuten zu­rück­liegt, nutzen wir den Such­pa­ra­me­ter '-mmin', mit dem Wert '-5':

find . -type f -mmin -5

Mit dem Linux-find-Befehl nach Besitzer, Gruppe und Zu­griffs­rech­ten filtern

Unter Linux ist jeder Datei ein Benutzer als Besitzer zu­ge­ord­net. Ferner gehört jede Datei einer be­stimm­ten Nut­zer­grup­pe. Darauf aufbauend sind für jede Datei bestimmte Zu­griffs­rech­te (engl. per­mis­si­ons) fest­ge­legt. Nach all diesen In­for­ma­tio­nen können wir mit dem find-Befehl filtern, um unter Linux Dateien zu finden. Hier eine Übersicht der dabei zum Einsatz kommenden Such­pa­ra­me­ter:

Such­pa­ra­me­ter Erklärung
-user Nach Besitzer filtern
-group Nach Gruppe filtern
-perm Nach Da­tei­rech­ten filtern

Um nach Dateien zu suchen, die dem Root-Benutzer gehören, nutzen wir den Such­pa­ra­me­ter '-user' gefolgt vom Wert 'root':

find . -user root

Um nach Dateien zu suchen, die dem eigenen Benutzer gehören, nutzen wir den Such­pa­ra­me­ter '-user' gefolgt vom Ausdruck '$(whoami)'. Letzterer wird zum Namen des an­ge­mel­de­ten Benutzers aufgelöst:

find . -user $(whoami)

Um nach Dateien zu suchen, die der Admin-Gruppe zugehören, nutzen wir den Such­pa­ra­me­ter '-group' gefolgt vom Wert 'admin':

find . -group admin

Neben dem Filtern nach Besitzer und Gruppe ist es auch möglich, nach Zu­griffs­rech­ten zu filtern. Dabei kommt ein Triplet von Ok­tal­zah­len zum Einsatz. Häufig benutzte Werte sind '644', '755' etc. Die erste Zahl definiert die Zu­griffs­rech­te für den Besitzer, die zweite für die Gruppe, die dritte für andere Nutzer. Jede der drei Ok­tal­zah­len wird durch Addition der einzelnen Rechte erzeugt. Wie das genau funk­tio­niert, erklären wir in unserem Artikel zur Vergabe von Ver­zeich­nis­rech­ten mit chmod.

Um Dateien zu finden, die für jeglichen Benutzer voll zu­greif­bar sind, nutzen wir den Such­pa­ra­me­ter '-perm' gefolgt vom Wert '777':

find . -perm 777

Um Dateien zu finden, die nur für den Besitzer voll zu­greif­bar sind, nutzen wir den Such­pa­ra­me­ter '-perm' gefolgt vom Wert '700':

find . -perm 700

Wir können den find-Befehl auch nutzen, um unter Linux Dateien zu finden, die min­des­tens die an­ge­ge­be­nen Rechte aufweisen. Dazu stellen wir der Oktalzahl un­mit­tel­bar ein Mi­nus­zei­chen voran:

find . -perm -007

Die Re­kur­si­ons­tie­fe des Linux-find-Befehls be­schrän­ken

Nor­ma­ler­wei­se durch­läuft der Linux-find-Befehl rekursiv alle Un­ter­ver­zeich­nis­se. Es ist jedoch oft nützlich, die Tiefe der Rekursion zu be­schrän­ken. Dazu nutzen wir die Such­pa­ra­me­ter '-maxdepth' und -mindepth:

Such­pa­ra­me­ter Erklärung
-maxdepth Maximale Re­kur­si­ons­tie­fe
-mindepth Minimale Re­kur­si­ons­tie­fe

Um unter Dateien zu finden, die mehr als 50 Megabyte groß sind und dabei nur Ver­zeich­nis­se ein­zu­schlie­ßen, die nicht mehr als zwei Ebenen tiefer liegen als das der­zei­ti­ge Ver­zeich­nis, nutzen wir den folgenden Befehl:

find . -type f -maxdepth 2 -size +50M

Um unter Dateien zu finden, die mehr als 50 Megabyte groß sind und dabei nur Ver­zeich­nis­se ein­zu­schlie­ßen, die min­des­tens drei Ebenen und nicht mehr als fünf Ebenen tiefer liegen als das der­zei­ti­ge Ver­zeich­nis, nutzen wir den folgenden Befehl:

find . -type f -mindepth 3 -and -maxdepth 5 -size +50M

Mit dem Linux-find-Befehl Dateien finden und ver­ar­bei­ten

Bisher haben wir uns darauf be­schränkt, unter Linux Dateien zu finden. Viele An­wen­dungs­fäl­le erfordern jedoch das mas­sen­haf­te Ver­ar­bei­ten der ge­fun­de­nen Dateien. Übliche Szenarien sind das Re­pa­rie­ren von Zu­griffs­rech­ten für web­ba­sier­te Software wie WordPress oder das Löschen von Dateien nach einem Hack. Auch für diese An­wen­dungs­fäl­le greifen wir auf den find-Befehl zurück.

Be­trach­ten wir das generelle Muster für das Ausführen eines Kommandos für jede gefundene Datei. Wir nutzen dazu den '-exec'-Parameter, gefolgt von einem Linux-Kommando und dessen Pa­ra­me­tern. Ab­ge­schlos­sen wird der gesamte Befehl vom immer gleich blei­ben­den Text '{} \;':

find <verzeichnis_pfad> <such_parameter> -exec <kommando_und_parameter> {} \;

Beachten Sie, dass das Ausführen des Kommandos ohne Nachfrage abläuft! Je nach gewählten Such­pa­ra­me­tern und dem gegebenen Kommando kann die Aus­füh­rung des find-Befehls mit dem '-exec'-Parameter schwere Schäden am System her­vor­ru­fen.

Um das Risiko zu begrenzen, gibt es analog zum '-exec'-Parameter den '-ok'-Parameter. Dieser erzwingt die in­ter­ak­ti­ve Be­stä­ti­gung der Ver­ar­bei­tung jeder einzelnen ge­fun­de­nen Datei:

find <verzeichnis_pfad> <such_parameter> -ok <kommando_und_parameter> {} \;

Vor­sichts­hal­ber be­schrän­ken wir bei den nach­fol­gen­den Bei­spie­len die Re­kur­si­ons­tie­fe per '-maxdepth 1' auf nur ein Un­ter­ver­zeich­nis.

Hinweis

Achtung: Seien Sie vor­sich­tig mit den folgenden Bei­spie­len. Wir empfehlen Ihnen dringend, zum Aus­pro­bie­ren einen eigenen Ordner anzulegen. Wechseln Sie vor dem Ausführen der Beispiele in diesen Ordner, um si­cher­zu­stel­len, dass Sie Ihr System nicht be­schä­di­gen!

Mit dem Linux-find-Befehl Besitzer und Gruppe anpassen

Um Besitzer und Gruppe aller Dateien und Ver­zeich­nis­se auf den Wert 'www-data' zu setzen, nutzen wir den folgenden find-Befehl mit dem chown-Kommando:

find . -maxdepth 1 -exec chown www-data:www-data {} \;

Mit dem Linux-find-Befehl Da­tei­rech­te anpassen

Um Dateien mit Rechten '777' zu finden und auf '664' zu setzen, nutzen wir den folgenden find-Befehl mit dem chmod-Kommando:

find . -type f -maxdepth 1 -perm 777 -exec chmod 664 {} \;

Um die Rechte aller Ver­zeich­nis­se auf '755' zu setzen, nutzen wir den folgenden find-Befehl mit dem chmod-Kommando:

find . -type d -maxdepth 1 -exec chmod 755 {} \;

Mit dem Linux-find-Befehl leere Ver­zeich­nis­se und Dateien löschen

Sie können den find-Befehl auch nutzen, um gefundene Dateien und Ver­zeich­nis­se zu löschen. Vor­sichts­hal­ber zeigen wir dies hier nur für leere Dateien und Ver­zeich­nis­se. Ferner nutzen wir anstelle des '-exec'-Pa­ra­me­ters den '-ok'-Parameter, um den Nutzer zu zwingen, dem Löschen explizit zu­zu­stim­men.

Um alle leeren Linux-Ver­zeich­nis­se zu löschen, nutzen wir den folgenden find-Befehl mit dem rmdir-Kommando:

find . -type d -maxdepth 1 -empty -ok rmdir {} \;

Um alle leeren Linux-Dateien zu löschen, nutzen wir den folgenden find-Befehl mit dem rm-Kommando:

find . -type f -maxdepth 1 -empty -ok rm {} \;
Zum Hauptmenü