• Allgemein
  • Effektives Auffinden von Dateien nach Namen unter Linux

Effektives Auffinden von Dateien nach Namen unter Linux

Linux-Befehl ‚find‘ zum Auffinden von Dateien nach Namen

Der Befehl "find" ist ein leistungsstarkes Werkzeug in Linux, mit dem du Dateien anhand verschiedener Kriterien suchen kannst, darunter auch anhand ihres Namens. "find" durchsucht rekursiv ein Verzeichnis und seine Unterverzeichnisse nach Dateien, die den angegebenen Kriterien entsprechen. Hier erfährst du, wie du "find" verwendest, um Dateien nach Namen zu finden:

Syntax von „find“ für die Namenssuche

Die Syntax von "find" für die Namenssuche lautet:

find [Suchoptionen] [Suchkriterien] [Aktionen]

Suchkriterien für Dateinamen

Zum Suchen von Dateien nach Namen verwendest du das Suchkriterium -name gefolgt vom Namen oder einem Muster des Namens der gesuchten Datei. Beispielsweise sucht der folgende Befehl nach einer Datei mit dem genauen Namen "Datei.txt":

find -name Datei.txt

Teilübereinstimmungen und Platzhalter

Du kannst auch nach Teilübereinstimmungen in Dateinamen suchen. Verwende dazu den Operator -iname anstelle von -name. Du kannst auch Platzhalter wie * (beliebige Zeichenfolge) und ? (genau ein Zeichen) verwenden. Beispielsweise sucht der folgende Befehl nach Dateien, die mit "Datei" beginnen:

find -iname 'Datei*'

Einschränken des Suchbereichs

Standardmäßig durchsucht "find" alle Verzeichnisse im aktuellen Arbeitsverzeichnis. Du kannst den Suchbereich jedoch mit der Option -path einschränken. Beispielsweise durchsucht der folgende Befehl nur das Verzeichnis "/tmp/":

find -path '/tmp/*' -name 'Datei.txt'

Sonderzeichen in Dateinamen

Wenn der Dateiname Sonderzeichen wie Leerzeichen oder Anführungszeichen enthält, musst du ihn in Anführungszeichen setzen. Beispielsweise sucht der folgende Befehl nach einer Datei mit dem Namen "Dokument mit Leerzeichen.txt":

find -name "Dokument mit Leerzeichen.txt"

Suche nach Groß- und Kleinschreibung

Standardmäßig ignoriert "find" die Groß- und Kleinschreibung bei der Namenssuche. Um zwischen Groß- und Kleinschreibung zu unterscheiden, verwende die Option -nocase. Beispielsweise sucht der folgende Befehl nach einer Datei mit dem genauen Namen "DATEI.TXT":

find -name -nocase 'DATEI.TXT'

Verwendung der Syntax von ‚find‘ für die Namenssuche

Die Grundsyntax von ‚find‘ zum Suchen von Dateien nach Namen lautet:

find [Optionen] [Pfad] [Ausdruck]

Dabei ist:

  • Optionen: Optionale Flags, die das Suchverhalten beeinflussen, z. B. -name, -iname und -regex.
  • Pfad: Das Verzeichnis oder die Verzeichnisse, in denen du suchen möchtest.
  • Ausdruck: Der Suchbegriff, der den Dateinamen angibt.

Suche nach exakten Übereinstimmungen

Um nach Dateien zu suchen, die genau mit einem bestimmten Namen übereinstimmen, verwende die Option -name. Beispiel:

find /home/benutzer -name datei.txt

Dieser Befehl sucht im Verzeichnis /home/benutzer nach der Datei datei.txt.

Suche nach Teilübereinstimmungen

Um nach Dateien zu suchen, die eine Teilzeichenfolge im Namen enthalten, verwende die Option -iname. Beispiel:

find /home/benutzer -iname "*datei*"

Dieser Befehl sucht im Verzeichnis /home/benutzer nach allen Dateien, deren Name die Zeichenfolge "datei" enthält.

Groß- und Kleinschreibung beachten

Standardmäßig ignoriert ‚find‘ die Groß- und Kleinschreibung. Um nach Dateien mit exakter Groß- und Kleinschreibung zu suchen, verwende die Option -namec oder -inamec. Beispiel:

find /home/benutzer -namec "Datei.txt"

Dieser Befehl sucht im Verzeichnis /home/benutzer nach der Datei "Datei.txt" und unterscheidet dabei zwischen Groß- und Kleinschreibung.

Suche nach exakten Übereinstimmungen oder Teilübereinstimmungen

Bei der Suche nach Dateien nach Namen kannst du nach exakten Übereinstimmungen oder Teilübereinstimmungen suchen.

Exakte Übereinstimmungen

Um nach einem exakten Dateinamen zu suchen, verwende die Option -name. Beispielsweise sucht der folgende Befehl nach der Datei "myfile.txt":

find / -name myfile.txt

Teilübereinstimmungen

Um nach Teilübereinstimmungen zu suchen, verwende die Option -iname. Beispielsweise sucht der folgende Befehl nach allen Dateien, die die Zeichenfolge "myfile" im Namen enthalten:

find / -iname *myfile*

Wenn du bei der Teilübereinstimmung nach Groß- und Kleinschreibung suchen möchtest, verwende die Option -regex. Beispielsweise sucht der folgende Befehl nach Dateien, die mit "myfile" beginnen:

find / -regex "^myfile.*"

Einschränken der Suche auf bestimmte Verzeichnisse oder Dateitypen

Du kannst die Suche mit dem Befehl find auf bestimmte Verzeichnisse oder Dateitypen eingrenzen, um die Ergebnisse zu verfeinern.

Suche in bestimmten Verzeichnissen

Um die Suche auf ein bestimmtes Verzeichnis einzugrenzen, verwende die Option -path. Gib den vollständigen Pfad zum Verzeichnis an, inklusive einem nachgestellten Schrägstrich /.

find /home/benutzername -path /home/benutzername/Dokumente

Diese Suche würde nur Dateien im Verzeichnis /home/benutzername/Dokumente und seinen Unterverzeichnissen zurückgeben.

Suche nach bestimmten Dateitypen

Um die Suche auf bestimmte Dateitypen einzuschränken, verwende die Option -type. Du kannst aus folgenden Dateitypen auswählen:

  • f – reguläre Datei
  • d – Verzeichnis
  • l – symbolischer Link
  • s – Socket
  • p – Pipe

Um beispielsweise nach Textdateien zu suchen, würdest du Folgendes eingeben:

find /home/benutzername -type f -name *.txt

Diese Suche würde alle Textdateien mit der Endung .txt im Verzeichnis /home/benutzername zurückgeben.

Verwendung von Platzhaltern für dynamische Suchen

Platzhalter sind eine leistungsstarke Funktion, die dir hilft, deine Suche flexibel zu gestalten. Sie ermöglichen es dir, eine Vielzahl von Dateinamen mit einem einzigen Befehl zu finden.

Der Platzhalter ‚*‘

Der Platzhalter * steht für eine beliebige Anzahl von Zeichen in einem Dateinamen. Du kannst ihn verwenden, um nach Dateien mit einem bestimmten Präfix oder Suffix zu suchen. Beispielsweise findet der Befehl find /home/benutzer -name '*.txt' alle Dateien im Verzeichnis /home/benutzer, die mit der Endung .txt enden.

Der Platzhalter ‚?‘

Der Platzhalter ? steht für genau ein Zeichen in einem Dateinamen. Er ist nützlich für die Suche nach Dateien mit einem unbekannten Zeichen. Beispielsweise findet der Befehl find /home/benutzer -name 'datei??.txt' alle Dateien im Verzeichnis /home/benutzer, die den Namen "datei" und zwei unbekannte Zeichen vor der Endung .txt haben.

Kombination von Platzhaltern

Du kannst Platzhalter kombinieren, um komplexe Suchen durchzuführen. Beispielsweise findet der Befehl find /home/benutzer -name '*[0-9]*' alle Dateien im Verzeichnis /home/benutzer, die eine Zahl im Dateinamen enthalten.

Tipps zur Verwendung von Platzhaltern

  • Verwende Platzhalter sparsam, da sie die Suche verlangsamen können.
  • Verwende Anführungszeichen um Suchbegriffe mit Platzhaltern, um Verwechslungen mit Shell-Expansionen zu vermeiden.
  • Beachte, dass Platzhalter keine Verzeichnisse finden. Verwende den Befehl -type d zusammen mit Platzhaltern, um Verzeichnisse zu finden.

Suche nach Dateien mit Groß- und Kleinschreibung

Beim Auffinden von Dateien nach Namen mit find kannst du angeben, ob die Groß- und Kleinschreibung beachtet werden soll oder nicht.

Exakte Übereinstimmungen mit Groß- und Kleinschreibung

Um nach Dateien zu suchen, die exakt mit einem bestimmten Namen, einschließlich Groß- und Kleinschreibung, übereinstimmen, verwendest du die Option -name.

find /verzeichnis -name "DateiName"

Diese Suche findet z. B. die Datei DateiName, aber nicht dateiname oder DATEINAME.

Teilübereinstimmungen mit Groß- und Kleinschreibung

Wenn du nach Dateien suchen möchtest, die einen bestimmten Teilstring im Namen enthalten, aber nicht unbedingt mit exakter Groß- und Kleinschreibung übereinstimmen, verwendest du die Option -iname.

find /verzeichnis -iname "teilzeichen"

Diese Suche würde z. B. sowohl Teilzeichen als auch TEILZEICHEN finden.

Berücksichtigung der Groß- und Kleinschreibung bei der Suche

Standardmäßig beachtet find keine Groß- und Kleinschreibung. Wenn du die Groß- und Kleinschreibung jedoch beachten möchtest, kannst du die Option -cs oder -csf verwenden.

find /verzeichnis -cs -name "DateiName"

Diese Suche findet nur Dateien mit dem genauen Namen DateiName.

find /verzeichnis -csf -name "DateiName"

Diese Suche findet nur Dateien, deren Name mit DateiName beginnt.

Suche nach Dateien mit Sonderzeichen im Namen

Wenn du nach Dateien suchst, die Sonderzeichen in ihrem Namen enthalten, wie z. B. Leerzeichen, Bindestriche oder Punkte, musst du die Syntax von find anpassen.

Verwendung von Escape-Zeichen

Um Sonderzeichen in der Namenssuche zu verwenden, musst du ihnen ein Escape-Zeichen voranstellen. Das Escape-Zeichen ist der Backslash \.

Beispiel: Um nach einer Datei mit dem Namen "Meine Datei.txt" zu suchen, verwendest du folgenden Befehl:

find / -name "Meine\ Datei.txt"

Behandlung von Leerzeichen

Leerzeichen in Dateinamen stellen eine besondere Herausforderung dar, da sie die Befehlsargumente trennen. Um Leerzeichen in der Namenssuche zu handhaben, kannst du Folgendes tun:

  • Einfache Anführungszeichen verwenden: find / -name 'Meine Datei.txt'
  • Den Befehl xargs verwenden: find / -name Meine\ Datei.txt | xargs echo

Überlegungen

  • Du musst die Escape-Zeichen korrekt platzieren. Fehlen sie oder sind sie falsch platziert, führt dies zu Fehlern.
  • Denke daran, dass Escape-Zeichen auch in anderen Teilen des Befehls erforderlich sein können, z. B. bei der Angabe von Verzeichnispfaden.
  • Platzhalter (* und ?) können auch bei der Suche nach Dateien mit Sonderzeichen verwendet werden. Verwende jedoch Escape-Zeichen, um sicherzustellen, dass sie nicht als Shell-Metazeichen interpretiert werden.

Suchen und Auflisten der gefundenen Dateien

Nachdem du deine Suche durchgeführt hast, möchtest du dir die gefundenen Dateien ansehen. Mit dem find-Befehl kannst du die Dateien auflisten lassen.

Auflisten aller gefundenen Dateien

Um alle gefundenen Dateien aufzulisten, verwende die Option -ls (long listing). Diese Option zeigt detaillierte Informationen zu jeder Datei an, wie Dateiname, Größe, Datum der letzten Änderung und Berechtigungen.

find /home -name "*.txt" -ls

Nur Dateinamen auflisten

Wenn du nur die Dateinamen der gefundenen Dateien anzeigen möchtest, verwende die Option -print. Diese Option gibt die Dateinamen als einzelne Zeilen aus.

find /home -name "*.txt" -print

Suchen und Auflisten von Dateien in einem bestimmten Verzeichnis

Du kannst die Suche auf ein bestimmtes Verzeichnis beschränken, indem du die Option -path verwendest. Dies ist hilfreich, wenn du nur Dateien in einem bestimmten Unterverzeichnis finden möchtest.

find /home -path "/home/user/Dokumente/*.txt" -print

Suchen und Auflisten von Dateien nach Größe

Du kannst auch nach Dateien mit einer bestimmten Größe suchen, indem du die Optionen -size oder -size verwendest. -size nimmt einen numerischen Wert gefolgt von einem Größenbezeichner (k für Kilobyte, M für Megabyte usw.) an. -size hingegen vergleicht die Dateigröße mit einem Wert, der in Blöcken angegeben wird (jeder Block ist 512 Byte groß).

find /home -size 100k -print
find /home -size +10M -print

Suchen und Ausführen von Aktionen für die gefundenen Dateien

Sobald du die gewünschten Dateien gefunden hast, kannst du verschiedene Aktionen für sie ausführen.

Aktionen auf einzelne Dateien anwenden

Mit dem Befehl find kannst du einzelne Aktionen auf jede gefundene Datei anwenden. Dies kann mit der Option -exec geschehen, gefolgt vom auszuführenden Befehl und einem Semikolon (;). Beispielsweise kannst du die Größen aller gefundenen Dateien mit dem Befehl -exec ls -l {} + anzeigen:

find / -name "dateiname" -exec ls -l {} +

Aktionen auf mehrere Dateien gleichzeitig anwenden

Wenn du eine Aktion auf mehrere Dateien gleichzeitig anwenden möchtest, kannst du die Option -print0 in Kombination mit dem Hilfsmittel xargs verwenden. Dies ist besonders nützlich für Befehle, die mehrere Argumente akzeptieren. Beispielsweise kannst du mit dem Befehl -print0 -exec xargs -0 rm alle gefundenen Dateien löschen:

find / -name "dateiname" -print0 -exec xargs -0 rm {}

Skripte für komplexe Aktionen verwenden

Für komplexere Aktionen kannst du ein Skript schreiben und es mit der Option -exec aufrufen. Dies ermöglicht es dir, benutzerdefinierte Aktionen auszuführen, z. B. das Verschieben von Dateien an einen bestimmten Speicherort oder das Ändern ihrer Berechtigungen. Beispielsweise kannst du das folgende Skript move_files.sh erstellen:

#!/bin/bash
mv "$1" /zielverzeichnis

Und es dann mit dem Befehl -exec aufrufen:

find / -name "dateiname" -exec ./move_files.sh {} +

Verwendung externer Tools

Neben den integrierten Optionen von find kannst du auch externe Tools wie grep, sed und awk verwenden, um die gefundenen Dateien zu verarbeiten und Aktionen auszuführen. Dies kann hilfreich sein, wenn du komplexe Such- oder Verarbeitungsoperationen durchführen möchtest.

Beispielsweise kannst du den Befehl grep verwenden, um nach bestimmten Mustern im Inhalt der gefundenen Dateien zu suchen:

find / -name "dateiname" -exec grep "suchmuster" {} +