Effizientes Finden von Dateien in Linux

Foto des Autors

By Jan

Suchen nach Dateien anhand ihres Namens

Wenn du den Namen einer Datei kennst, aber nicht weißt, wo sie sich befindet, kannst du den Befehl find verwenden, um sie anhand ihres Namens zu suchen. Die Syntax lautet wie folgt:

find [Pfad] -name [Dateiname]

Dabei ist:

  • [Pfad]: Der Pfad zum Verzeichnis, in dem du suchen möchtest.
  • [Dateiname]: Der Name der Datei, nach der du suchst.

Platzhalter verwenden

Du kannst Platzhalter verwenden, um nach Dateien zu suchen, die bestimmte Zeichen enthalten. Die folgenden Platzhalter stehen zur Verfügung:

  • *: Beliebige Anzahl beliebiger Zeichen
  • ?: Ein beliebiges Zeichen

Beispiel:

find /home -name "*README*"

Dieser Befehl sucht im Verzeichnis /home und allen seinen Unterverzeichnissen nach allen Dateien, die das Wort "README" irgendwo in ihrem Namen enthalten.

Reguläre Ausdrücke verwenden

Du kannst auch reguläre Ausdrücke verwenden, um nach Dateien anhand ihres Namens zu suchen. Dies ist eine leistungsstärkere Möglichkeit, als Platzhalter zu verwenden. Weitere Informationen zur Verwendung regulärer Ausdrücke findest du in der Manpage zu find.

Beispiel:

find /home -name "filename[0-9].txt"

Dieser Befehl sucht im Verzeichnis /home und allen seinen Unterverzeichnissen nach Dateien mit dem Namen "filename", gefolgt von einer Zahl zwischen 0 und 9 und der Endung ".txt".

Groß- und Kleinschreibung beachten

Standardmäßig unterscheidet find zwischen Groß- und Kleinschreibung. Wenn du nach einer Datei suchen möchtest, ohne auf die Groß-/Kleinschreibung zu achten, kannst du die Option -iname verwenden.

Beispiel:

find /home -iname "README"

Dieser Befehl sucht im Verzeichnis /home und allen seinen Unterverzeichnissen nach allen Dateien mit dem Namen "README", unabhängig von der Groß-/Kleinschreibung.

Suche nach Dateien anhand ihrer Dateitypen

Wenn du Dateien mit einem bestimmten Dateityp suchen möchtest, kannst du den Befehl find mit der Option -type verwenden. Diese Option ermöglicht es dir, Dateien anhand ihrer Dateitypkennung zu suchen, wie z. B. f für reguläre Dateien, d für Verzeichnisse oder h für symbolische Links.

Beispiel: Suche nach Textdateien

Nehmen wir an, du möchtest alle Textdateien im aktuellen Verzeichnis und seinen Unterverzeichnissen finden. Du kannst den folgenden Befehl verwenden:

find -type f -name "*.txt"

Dieser Befehl sucht nach allen Dateien mit der Dateityperkennung f (reguläre Dateien) und einem Namen, der mit .txt endet.

Beispiel: Suche nach Verzeichnissen

Wenn du nach Verzeichnissen in deinem Home-Verzeichnis suchen möchtest, kannst du den folgenden Befehl verwenden:

find /home -type d

Dieser Befehl sucht nach allen Dateien mit der Dateityperkennung d (Verzeichnisse) im Verzeichnis /home.

Beispiel: Suche nach allen Dateien, die nicht reguläre Dateien sind

Du kannst den Befehl find auch verwenden, um nach Dateien zu suchen, die keinen bestimmten Dateityp haben. Dies ist hilfreich, wenn du z. B. nach Symbolischen Links oder Named Pipes suchen möchtest.

find -not -type f

Dieser Befehl sucht nach allen Dateien mit jeder Dateityperkennung außer f (reguläre Dateien).

Suche nach Dateien anhand ihrer Größe

Wenn du Dateien anhand ihrer Größe suchen möchtest, kannst du die Option -size des Befehls find verwenden. Damit kannst du Dateien nach ihrer Größe in Bytes, Kilobytes (K), Megabytes (M) oder Gigabytes (G) suchen.

Suche nach Dateien einer bestimmten Größe

Um nach Dateien einer bestimmten Größe zu suchen, verwende die folgende Syntax:

find /pfad/zum/verzeichnis -size n[Einheit]

Dabei ist:

  • /pfad/zum/verzeichnis das Verzeichnis, in dem du suchen möchtest.
  • n die Größe, nach der du suchst.
  • [Einheit] die Einheit, in der du die Größe angibst (z. B. "K" für Kilobytes).

Beispiel: Um nach Dateien mit einer Größe von 1 Megabyte zu suchen, würdest du folgenden Befehl ausführen:

find /home/benutzername -size 1M

Suche nach Dateien innerhalb eines Größenbereichs

Du kannst auch nach Dateien innerhalb eines bestimmten Größenbereichs suchen. Dazu verwendest du die Operatoren > (größer als), < (kleiner als), >= (größer oder gleich) und <= (kleiner oder gleich).

Beispiel: Um nach Dateien zu suchen, die größer als 10 Megabyte sind, würdest du folgenden Befehl ausführen:

find /home/benutzername -size +10M

Suche nach Dateien mit einer bestimmten Dateigröße

Du kannst auch nach Dateien suchen, die eine bestimmte Dateigröße haben. Dazu verwendest du die Option -size c.

Beispiel: Um nach Dateien mit einer Größe von genau 100 Kilobytes zu suchen, würdest du folgenden Befehl ausführen:

find /home/benutzername -size 100c

Suche nach Dateien, die größer oder kleiner als eine bestimmte Größe sind

Du kannst auch nach Dateien suchen, die größer oder kleiner als eine bestimmte Größe sind. Dazu verwendest du die Optionen -minsize und -maxsize.

Beispiel: Um nach Dateien zu suchen, die größer als 100 Kilobyte sind, würdest du folgenden Befehl ausführen:

find /home/benutzername -minsize 100k

Um nach Dateien zu suchen, die kleiner als 100 Kilobyte sind, würdest du folgenden Befehl ausführen:

find /home/benutzername -maxsize 100k

Suche nach Dateien anhand ihres Datums

Wann hast du das letzte Mal eine Datei auf deinem System abgespeichert? Wenn du dich nicht erinnerst, keine Sorge! Mithilfe des Befehls find kannst du Dateien anhand ihres Erstellungs-, Änderungs- oder Zugriffsdatums suchen.

Erstellungsdatum

Um nach Dateien zu suchen, die an einem bestimmten Datum erstellt wurden, verwende die Option -ctime, gefolgt von der Anzahl der Tage vor dem aktuellen Datum:

find / -ctime 2

Dieser Befehl sucht alle Dateien im Stammverzeichnis (/), die innerhalb der letzten zwei Tage erstellt wurden. Du kannst auch relative Werte verwenden, beispielsweise -ctime -7, um nach Dateien zu suchen, die in den letzten sieben Tagen erstellt wurden.

Änderungsdatum

Zum Suchen nach Dateien, die an einem bestimmten Datum geändert wurden, verwende die Option -mtime:

find / -mtime 10

Dieser Befehl sucht alle Dateien im Stammverzeichnis, die innerhalb der letzten zehn Tage geändert wurden.

Zugriffsdatum

Du kannst auch nach Dateien suchen, auf die an einem bestimmten Datum zugegriffen wurde, indem du die Option -atime verwendest:

find / -atime 5

Dieser Befehl sucht alle Dateien im Stammverzeichnis, auf die innerhalb der letzten fünf Tage zugegriffen wurde.

Kombinieren von Datumsoptionen

Du kannst Datumsoptionen kombinieren, um die Suche weiter einzuschränken. Beispielsweise sucht der folgende Befehl nach Dateien, die innerhalb der letzten zwei Tage erstellt und innerhalb der letzten fünf Tage geändert wurden:

find / -ctime 2 -mtime 5

Suche nach Dateien anhand ihrer Berechtigungen

Neben der Suche nach Dateien anhand von Name, Typ, Größe und Datum kannst du auch nach Dateien suchen, die bestimmte Dateiberechtigungen haben. Dies kann nützlich sein, wenn du z. B. nach Dateien suchst, die nur du lesen kannst, oder nach Dateien, die für alle Benutzer ausführbar sind.

Finden von Dateien mit bestimmten Berechtigungen

Um nach Dateien mit bestimmten Berechtigungen zu suchen, kannst du den Befehl find in Verbindung mit der Option -perm verwenden. Die Syntax lautet wie folgt:

find [Pfad] -perm [Berechtigungen]

Dabei ist:

  • [Pfad] der Pfad zum Verzeichnis, in dem du suchen möchtest.
  • [Berechtigungen] ein numerischer Wert, der die gewünschten Dateiberechtigungen angibt.

Beispielsweise kannst du mit dem folgenden Befehl nach allen Dateien im aktuellen Verzeichnis und seinen Unterverzeichnissen suchen, die nur für den Benutzer lesbar sind:

find . -perm 400

Verständnis numerischer Berechtigungswerte

Numerische Berechtigungswerte werden verwendet, um die Berechtigungen für jeden Dateityp einzeln anzugeben. Die erste Ziffer gibt die Berechtigungen für den Eigentümer der Datei an, die zweite Ziffer gibt die Berechtigungen für die Gruppe an, zu der der Eigentümer gehört, und die dritte Ziffer gibt die Berechtigungen für alle anderen Benutzer an.

Jede Ziffer kann eine Kombination aus folgenden Werten sein:

  • 4: Leseberechtigung
  • 2: Schreibberechtigung
  • 1: Ausführungsberechtigung

Beispielsweise gibt der Wert 400 an, dass der Eigentümer der Datei Leseberechtigungen hat, während alle anderen Benutzer keine Berechtigungen haben.

Verwendung von find und -perm für erweiterte Suchen

Zusätzlich zur Angabe exakter numerischer Berechtigungswerte kannst du auch Platzhalter in der Option -perm verwenden, um nach Dateien mit bestimmten Arten von Berechtigungen zu suchen. Beispielsweise kannst du mit dem folgenden Befehl nach allen Dateien suchen, die für den Benutzer schreibbar sind:

find . -perm -200

Dieser Befehl sucht nach allen Dateien, deren zweite Ziffer (die die Berechtigungen für die Gruppe des Benutzers angibt) mindestens 2 (für Schreibberechtigung) ist.

Verwendung von regulären Ausdrücken für erweiterte Suche

Mit regulären Ausdrücken (Regex) kannst du erweiterte Suchmuster erstellen, um die Suche nach Dateien in Linux noch genauer zu gestalten. Regex-Syntax ermöglicht es dir, komplexere Kriterien zu definieren, die auf Textzeichenfolgen basieren.

Grundlagen von regulären Ausdrücken

Regex-Ausdrücke verwenden spezielle Metazeichen, um Suchmuster zu definieren:

  • .` (Punkt): Passt zu jedem Zeichen
  • * (Sternchen): Passt zu null oder mehreren Vorkommen des vorherigen Zeichens
  • + (Pluszeichen): Passt zu einem oder mehreren Vorkommen des vorherigen Zeichens
  • ? (Fragezeichen): Passt zu null oder einem Vorkommen des vorherigen Zeichens
  • \[ und \] (eckige Klammern): Definieren eine Zeichenklasse, die mit einem beliebigen der eingeschlossenen Zeichen übereinstimmt
  • ^ (Zirkumflex): Passt an den Anfang der Zeichenfolge
  • $ (Dollarzeichen): Passt an das Ende der Zeichenfolge

Regex-Suchbeispiele

  • ^file: Dateien, die mit "file" beginnen
  • .txt$: Dateien, die mit ".txt" enden
  • .*jpg: Dateien, die irgendwo im Namen ".jpg" enthalten
  • a*b: Dateien, die ein "a" gefolgt von null oder mehreren "b"s enthalten
  • \[0-9\]+: Dateien, deren Name eine Zahlenfolge enthält

Verwendung von Regex mit dem Befehl find

Um Regex mit find zu verwenden, verwende die Option -regex gefolgt vom Regex-Ausdruck.

Beispiel: Suche nach Dateien im Verzeichnis /home, die mit "file" beginnen:

find /home -regex '^file'

Regex-Ressourcen

Für weitere Informationen zu Regex-Syntax kannst du folgende Ressourcen nutzen:

Suchen nach Dateien rekursiv

Bei einer rekursiven Suche werden Verzeichnisse durchlaufen, um Dateien zu finden, die deinen Suchkriterien entsprechen, auch wenn sie sich in Unterverzeichnissen befinden. Diese Methode ist hilfreich, wenn du nicht weißt, in welchem Verzeichnis sich eine bestimmte Datei befindet, oder wenn du nach Dateien mit einem bestimmten Namen suchen möchtest, die sich über mehrere Verzeichnisse erstrecken.

Um eine rekursive Suche durchzuführen, verwende die Option -r (rekursiv) mit dem Befehl find. Beispielsweise kannst du nach allen Dateien mit dem Namen test.txt in deinem aktuellen Verzeichnis und allen Unterverzeichnissen suchen, indem du folgenden Befehl ausführst:

find . -name test.txt -r

Suche nach Dateien in versteckten Verzeichnissen

Wenn du nach Dateien in versteckten Verzeichnissen suchen möchtest, musst du die Option -xdev (Verzeichnisgrenzen überschreiten) verwenden. Diese Option verhindert, dass die Suche an Gerätegrenzen (z. B. an gemounteten Laufwerken) stoppt.

Um beispielsweise nach allen Dateien mit dem Namen secret.txt in deinem aktuellen Verzeichnis und allen Unterverzeichnissen zu suchen, einschließlich versteckter Verzeichnisse, kannst du folgenden Befehl ausführen:

find . -name secret.txt -r -xdev

Begrenzen der Anzahl der angezeigten Ergebnisse

Wenn du eine sehr große Anzahl von Dateien durchsuchst, kann die Ausgabe des Befehls find unübersichtlich werden. Um die Anzahl der angezeigten Ergebnisse zu begrenzen, kannst du die Option -maxdepth verwenden. Diese Option gibt die maximale Verschachtelungstiefe an, die die Suche durchlaufen soll.

Um beispielsweise nach allen Dateien mit dem Namen test.txt in deinem aktuellen Verzeichnis und allen Unterverzeichnissen bis zu einer Tiefe von 2 zu suchen, kannst du folgenden Befehl ausführen:

find . -name test.txt -r -maxdepth 2

Weiterleitungsbefehle für weitere Aktionen

Sobald du die gesuchten Dateien gefunden hast, kannst du Weiterleitungsbefehle verwenden, um weitere Aktionen durchzuführen. Beispielsweise kannst du die Ausgabe des Befehls find an den Befehl xargs weiterleiten, um eine Reihe von Befehlen auf die gefundenen Dateien anzuwenden.

Um beispielsweise alle Dateien mit dem Namen test.txt in deinem aktuellen Verzeichnis und allen Unterverzeichnissen zu löschen, kannst du folgenden Befehl ausführen:

find . -name test.txt -r | xargs rm

Suchen nach Dateien in versteckten Verzeichnissen

Versteckte Verzeichnisse in Linux beginnen mit einem Punkt (.). Diese Verzeichnisse werden oft zum Speichern von Konfigurationsdateien, temporären Dateien oder anderen Informationen verwendet, die du möglicherweise nicht regelmäßig benötigst. Um nach Dateien in versteckten Verzeichnissen zu suchen, musst du der find-Befehl anweisen, versteckte Dateien anzuzeigen.

Verwenden der Option -xdev

Eine Möglichkeit, nach Dateien in versteckten Verzeichnissen zu suchen, besteht darin, die Option -xdev zu verwenden. Diese Option weist find an, nicht über Gerätegrenzen hinweg zu suchen, wodurch sichergestellt wird, dass nur Dateien auf dem aktuellen Gerät durchsucht werden. So kannst du beispielsweise nach versteckten Dateien im Verzeichnis /home/benutzer suchen:

find /home/benutzer -xdev -name ".bashrc"

Verwenden von regulären Ausdrücken

Eine andere Möglichkeit, nach Dateien in versteckten Verzeichnissen zu suchen, ist die Verwendung regulärer Ausdrücke. Reguläre Ausdrücke sind Muster, mit denen du komplexe Suchkriterien definieren kannst. Um nach versteckten Dateien zu suchen, kannst du folgenden regulären Ausdruck verwenden:

find /home/benutzer -regex ".*\..*"

Dieser reguläre Ausdruck stimmt mit allen Dateien überein, deren Name mit einem Punkt beginnt.

Kombination von Optionen

Du kannst die Optionen -xdev und reguläre Ausdrücke kombinieren, um noch spezifischere Suchen durchzuführen. So kannst du beispielsweise nach versteckten Textdateien im Verzeichnis /home/benutzer suchen:

find /home/benutzer -xdev -regex ".*\..*\.txt"

Denke daran, dass die Suche nach Dateien in versteckten Verzeichnissen je nach Größe des Dateisystems und der Anzahl der versteckten Dateien einige Zeit in Anspruch nehmen kann.

Begrenzen der Anzahl der angezeigten Ergebnisse

Bei der Suche nach Dateien mit dem Befehl find kannst du die Anzahl der angezeigten Ergebnisse begrenzen, um eine übersichtlichere Ausgabe zu erhalten. Dies kann in folgenden Szenarien nützlich sein:

  • Vermeidung von Überlastung: Bei großen Dateisystemen kann eine unbegrenzte Suche zu einer Überlastung des Systems führen.
  • Fokus auf bestimmte Ergebnisse: Durch die Begrenzung der Ergebnisse kannst du dich auf die relevantesten Übereinstimmungen konzentrieren.

-maxdepth-Option

Die -maxdepth-Option begrenzt die Tiefe der Rekursion bei der Suche nach Dateien. Dies ist hilfreich, wenn du nur Dateien innerhalb eines bestimmten Verzeichnisses und nicht in seinen Unterverzeichnissen suchen möchtest. Die Syntax lautet:

find <Verzeichnis> -maxdepth <Tiefe>

Beispiel: Um nur Dateien auf der obersten Ebene des Verzeichnisses /home/benutzer zu finden, gibst du Folgendes ein:

find /home/benutzer -maxdepth 1

-print0– und -exec-Option

Eine weitere Methode zum Begrenzen der Anzahl der angezeigten Ergebnisse ist die Verwendung der -print0– und -exec-Optionen. -print0 weist find an, jede gefundene Datei mit einem Nullzeichen (\0) zu beenden, anstatt einem Zeilenumbruch. -exec ermöglicht es dir, einen Befehl für jede gefundene Datei auszuführen.

Beispiel: Um die ersten 10 gefundenen Dateien anzugeben, kannst du Folgendes eingeben:

find /home/benutzer -print0 | head -10 | xargs -0 ls -l

Die head– und xargs-Befehle beschränken die Anzahl der angezeigten Dateien auf 10 und listen ihre Details auf.

-exec-Option mit wc-Befehl

Du kannst die exec-Option auch zusammen mit dem wc-Befehl verwenden, um die Anzahl der gefundenen Dateien zu zählen:

find /home/benutzer -exec wc -l {} +

In diesem Beispiel zählt der wc-Befehl die Zeilen (Dateien) für jede gefundene Datei und gibt die Gesamtanzahl an.

Weiterleitungsbefehle für weitere Aktionen

Sobald du die gesuchten Dateien gefunden hast, kannst du sie mit ein paar einfachen Weiterleitungsbefehlen verschiedenen Aktionen unterziehen. Auf diese Weise kannst du die Dateiverwaltung automatisieren und Zeit sparen.

Kopieren, Verschieben und Löschen von Dateien

  • Kopieren: Um eine Datei in ein anderes Verzeichnis zu kopieren, kannst du find mit cp kombinieren:
find /pfad/zu/verzeichnis -name dateiname -exec cp {} /neues/verzeichnis \;
  • Verschieben: Du kannst find auch mit mv kombinieren, um Dateien zu verschieben:
find /pfad/zu/verzeichnis -name dateiname -exec mv {} /neues/verzeichnis \;
  • Löschen: Um Dateien zu löschen, kannst du find mit rm kombinieren:
find /pfad/zu/verzeichnis -name dateiname -exec rm {} \;

Anzeigen von Dateiinformationen

  • Dateigröße: Um die Größe einer Datei anzuzeigen, kannst du find mit ls -l kombinieren:
find /pfad/zu/verzeichnis -name dateiname -exec ls -l {} \;
  • Dateiberechtigungen: Um die Berechtigungen einer Datei anzuzeigen, kannst du find mit ls -l kombinieren:
find /pfad/zu/verzeichnis -name dateiname -exec ls -l {} \;

Ausführen von Skripten

Du kannst find auch mit Skripten kombinieren, um komplexere Aktionen auszuführen. Angenommen, du hast ein Skript mein_skript.sh, das eine Datei verarbeitet:

find /pfad/zu/verzeichnis -name dateiname -exec ./mein_skript.sh {} \;

Andere Optionen

  • xargs: Der Befehl xargs kann verwendet werden, um eine Liste von Dateien als Argumente an einen anderen Befehl weiterzuleiten. Er ist besonders nützlich, wenn der Befehl mehrere Argumente akzeptiert.
  • parallel: Der Befehl parallel kann verwendet werden, um Befehle parallel auf mehreren Dateien auszuführen. Dies kann die Ausführungszeit erheblich verkürzen. Du findest parallel hier: https://www.gnu.org/software/parallel/

Schreibe einen Kommentar