Linux find-Befehl: Datein und Verzeichnisse effizient suchen

Foto des Autors

By Jan

Was ist der Linux find-Befehl?

Der find-Befehl ist ein leistungsstarkes Tool in Linux, mit dem du Dateien und Verzeichnisse in deinem Dateisystem rekursiv suchen kannst. Er durchsucht sowohl versteckte als auch sichtbare Dateien und bietet dir eine Vielzahl von Suchkriterien, mit denen du genau die benötigten Elemente finden kannst.

Was kann der find-Befehl?

  • Suchen nach Dateinamen: Du kannst nach Dateien mit bestimmten Dateinamen oder Namensmustern suchen.
  • Suche nach Dateityp: Du kannst nach Dateien eines bestimmten Typs suchen, wie z. B. reguläre Dateien, Verzeichnisse, Blockgeräte oder symbolische Links.
  • Suche nach Dateiberechtigungen: Du kannst nach Dateien mit bestimmten Berechtigungen suchen, z. B. lesbare oder ausführbare Dateien.
  • Suche nach Datum und Uhrzeit: Du kannst nach Dateien suchen, die zu einem bestimmten Zeitpunkt erstellt, geändert oder aufgerufen wurden.
  • Suche nach Dateigröße: Du kannst nach Dateien einer bestimmten Größe oder eines bestimmten Größenbereichs suchen.
  • Suche nach Dateien in bestimmten Verzeichnissen: Du kannst den Suchbereich auf bestimmte Verzeichnisse oder Dateisystemeingrenzen.
  • Suche nach leeren Dateien: Du kannst nach leeren Dateien suchen, z. B. um ungenutzten Speicherplatz zu identifizieren.
  • Suche nach gelöschten Dateien: Mit den richtigen Berechtigungen kannst du nach gelöschten Dateien suchen, die sich noch im Papierkorb befinden.

Syntax des find-Befehls

Die Syntax des find-Befehls lautet:

find [Pfad] [Ausdruck] [Aktion]

Wobei die folgenden Argumente verwendet werden:

Pfad

Der Pfad gibt das Verzeichnis oder die Verzeichnisse an, in denen du suchen möchtest. Wenn kein Pfad angegeben ist, wird das aktuelle Arbeitsverzeichnis verwendet.

Ausdruck

Der Ausdruck gibt die Kriterien an, anhand derer du suchen möchtest. Dieser Abschnitt kann eine Kombination aus Suchoptionen und Dateinamenmustern enthalten.

Aktion

Die Aktion gibt an, was mit den gefundenen Dateien oder Verzeichnissen geschehen soll. Dies kann das Drucken des Namens, das Kopieren der Datei oder das Ausführen eines Befehls sein.

Beispielsweise sucht der folgende Befehl nach allen Dateien mit der Erweiterung .txt im Verzeichnis /home/benutzer:

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

Der folgende Befehl sucht nach allen Verzeichnissen namens Dokumente im aktuellen Verzeichnis und druckt ihre vollständigen Pfade:

find -name "Dokumente" -type d -print

Der folgende Befehl sucht nach allen Dateien im Verzeichnis /var/log, die älter als 30 Tage sind, und löscht sie:

find /var/log -mtime +30 -delete

Suchoptionen

Der find-Befehl bietet eine Vielzahl von Suchoptionen, mit denen du deine Suche nach Dateien und Verzeichnissen präzisieren kannst. Hier sind einige der wichtigsten Optionen:

Name

Mit der Option -name kannst du nach Dateien oder Verzeichnissen mit einem bestimmten Namen suchen. Du kannst auch Jokerzeichen wie * und ? verwenden, um Zeichen in dem Namen zu ersetzen.

Typ

Die Option -type ermöglicht es dir, nach Dateien oder Verzeichnissen eines bestimmten Typs zu suchen. Die gängigsten Dateitypen sind:

  • f für reguläre Dateien
  • d für Verzeichnisse
  • l für symbolische Links
  • s für Sockets

Größe

Mit der Option -size kannst du nach Dateien oder Verzeichnissen einer bestimmten Größe suchen. Du kannst eine Größe in Bytes, Kilobytes, Megabytes, Gigabytes oder Terabytes angeben. Beispielsweise würde -size +10M nach Dateien suchen, die größer als 10 Megabyte sind.

Zeitpunkt

Die Optionen -atime, -mtime und -ctime ermöglichen es dir, nach Dateien oder Verzeichnissen zu suchen, die zuletzt aufgerufen, geändert oder erstellt wurden. Du kannst ein Datum im Format JJJJ-MM-TT oder eine relative Zeitangabe wie -5 days (die letzten 5 Tage) angeben.

Berechtigungen

Mit der Option -perm kannst du nach Dateien oder Verzeichnissen mit bestimmten Berechtigungen suchen. Du kannst eine Oktalzahl verwenden, um die Berechtigungen anzugeben, oder du kannst symbolische Namen wie u+r (Lesezugriff für den Benutzer) oder g-w (Schreibzugriff für die Gruppe) verwenden.

Optionen für die erweiterte Suche

Zusätzlich zu diesen grundlegenden Suchoptionen bietet find auch eine Reihe von erweiterten Suchoptionen, darunter:

  • -exec: Führt einen Befehl für jede gefundene Datei oder jedes gefundene Verzeichnis aus
  • -prune: Beendet die Suche in dem aktuellen Verzeichnis oder Unterverzeichnis
  • -xdev: Überschreitet keine Dateisystemgrenzen hinweg

Dateinamenmuster

Dateinamenmuster ermöglichen es dir, Dateien nach bestimmten Namensmustern zu suchen. Sie sind eine leistungsstarke Möglichkeit, deine Suche einzugrenzen und genau die Dateien zu finden, nach denen du suchst.

Grundlegende Muster

  • ? – Übereinstimmung mit einem beliebigen einzelnen Zeichen
  • * – Übereinstimmung mit einer beliebigen Anzahl von Zeichen
  • [] – Übereinstimmung mit einem beliebigen Zeichen in der Menge. Bsp.: [abc] entspricht a, b oder c.
  • [^] – Übereinstimmung mit einem beliebigen Zeichen außerhalb der Menge. Bsp.: [^abc] entspricht jedem Zeichen außer a, b oder c.

Sonderzeichen

Neben den grundlegenden Mustern stehen dir auch Sonderzeichen zur Verfügung, die dir noch mehr Flexibilität bieten:

  • . (Punkt) – Übereinstimmung mit einem beliebigen versteckten Zeichen (z. B. .* entspricht allen Dateien mit einem beliebigen Namen, die mit einem Punkt enden)
  • ^ (Caret) – Übereinstimmung mit dem Anfang einer Zeichenfolge
  • $ (Dollarzeichen) – Übereinstimmung mit dem Ende einer Zeichenfolge

Beispielhafte Verwendung

Angenommen, du möchtest alle Dateien im aktuellen Verzeichnis finden, die mit myfile beginnen und mit .txt enden, würdest du das folgende Muster verwenden:

find . -name "myfile*.txt"

Wenn du nach allen Dateien mit einem beliebigen Namen suchst, die ein _ und eine 3 enthalten, würdest du Folgendes verwenden:

find . -name "*_3*"

Allgemeine Suchoptionen

Der Linux find-Befehl bietet eine Vielzahl allgemeiner Suchoptionen, mit denen du deine Suche weiter eingrenzen und spezifizieren kannst. Diese Optionen helfen dir, Dateien und Verzeichnisse präziser zu finden und die Ergebnisse zu filtern, sodass du genau die Informationen bekommst, die du benötigst.

Filteroptionen

  • -name: Suche nach Dateien oder Verzeichnissen mit einem bestimmten Namen.

  • -iname: Suche nach Dateien oder Verzeichnissen, deren Name dem angegebenen Muster ähnelt (ohne Berücksichtigung der Groß-/Kleinschreibung).

  • -regex: Suche nach Dateien oder Verzeichnissen, deren Name mit einem regulären Ausdruck übereinstimmt.

  • -mtime: Suche nach Dateien oder Verzeichnissen, deren letzte Änderungszeit vor oder nach einer bestimmten Anzahl von Tagen, Wochen, Monaten oder Jahren liegt.

  • -ctime: Suche nach Dateien oder Verzeichnissen, deren letzte Statusänderung (z. B. Zugriff oder Erstellung) vor oder nach einer bestimmten Zeit liegt.

  • -atime: Suche nach Dateien oder Verzeichnissen, auf die zuletzt vor oder nach einer bestimmten Zeit zugegriffen wurde.

Optionen zur Ergebnisfilterung

  • -print: Gebe den Pfad der gefundenen Dateien oder Verzeichnisse aus.

  • -print0: Gebe den Pfad der gefundenen Dateien oder Verzeichnisse mit einem nullterminierten Zeichen aus, wodurch sie einfach weiterverarbeitet werden können.

  • -ls: Gebe detaillierte Informationen zu den gefundenen Dateien oder Verzeichnissen aus, einschließlich Dateigröße, Datum und Uhrzeit der letzten Änderung und Berechtigungen.

  • -ls-l: Gebe detaillierte Informationen zu den gefundenen Dateien oder Verzeichnissen aus, einschließlich Eigentümer, Gruppe und anderer Berechtigungen.

  • -count: Gib die Anzahl der gefundenen Dateien oder Verzeichnisse aus.

Weitere Optionen

  • -exec: Führe einen Befehl für jede gefundene Datei oder jedes Verzeichnis aus. Dies ist nützlich, um weitere Operationen mit den Suchergebnissen durchzuführen, wie z. B. Kopieren, Löschen oder Archivieren.

  • -ok: Führe einen Befehl für jede gefundene Datei oder jedes Verzeichnis aus und fordere vor der Ausführung eine Bestätigung an.

  • -newer: Suche nach Dateien oder Verzeichnissen, die neuer sind als eine angegebene Datei oder ein angegebenes Verzeichnis.

Erweitertes Suchen mit xargs

Der xargs-Befehl ermöglicht es dir, die Ausgabe eines Befehls als Eingabe für einen anderen Befehl zu verwenden. Dies kann sehr nützlich sein, wenn du ein Ergebnis weiter verarbeiten möchtest, das der find-Befehl ausgegeben hat.

Pipen mit xargs

Du kannst den find-Befehl mit einem Pipe-Operator (|) an xargs weiterleiten, um die Ausgabe von find als Eingabe für xargs zu verwenden. Dies ist besonders nützlich, wenn der nachfolgende Befehl eine begrenzte Anzahl von Argumenten akzeptiert.

find /home/user -name "*.txt" | xargs grep "Suchbegriff"

Verarbeitung der Dateiliste

xargs bietet verschiedene Optionen zur Verarbeitung der Dateiliste. Du kannst beispielsweise die Anzahl der Eingabedateien angeben, die pro Befehl verarbeitet werden sollen:

find /home/user -name "*.txt" | xargs -n 5 grep "Suchbegriff"

In diesem Beispiel werden jeweils 5 Dateien an den grep-Befehl übergeben.

Anpassung der Befehlszeile

Du kannst auch die Befehlszeile anpassen, die xargs ausführt. Dies ist nützlich, wenn du zusätzliche Optionen oder Argumente an den nachfolgenden Befehl übergeben möchtest:

find /home/user -name "*.txt" | xargs -I{} echo "Verarbeite Datei: {}"

Im obigen Beispiel wird die Dateiliste durch {} dargestellt, und das Skript echo wird für jede Datei ausgeführt und gibt den Dateinamen aus.

Vorteile der Verwendung von xargs

Die Verwendung von xargs mit dem find-Befehl bietet mehrere Vorteile:

  • Effizienz: Es ermöglicht die Verarbeitung großer Dateilisten in kleinen Blöcken.
  • Anpassbarkeit: Du kannst die Befehlszeile steuern, die xargs ausführt.
  • Erweiterte Möglichkeiten: Es kann mit anderen Befehlen kombiniert werden, um komplexe Suchvorgänge durchzuführen.

Durch das Verständnis der erweiterten Suchmöglichkeiten mit xargs kannst du den find-Befehl effektiver nutzen, um Dateien und Verzeichnisse auf deinem Linux-System zu finden und zu verarbeiten.

Tipps zur Fehlersuche

Wenn du den find-Befehl verwendest, kannst du auf verschiedene Fehler stoßen. Hier sind einige Tipps zur Fehlerbehebung:

Überprüfe die Berechtigungen

Stelle sicher, dass du die Berechtigungen hast, um die Dateien und Verzeichnisse zu suchen, die du angibst. Wenn du keine Berechtigungen hast, wird der find-Befehl den Fehler "Permission denied" ausgeben.

Überprüfe die Syntax

Überprüfe, ob du die richtige Syntax für den find-Befehl verwendest. Die allgemeine Syntax lautet:

find [Optionen] Pfad [Ausdruck]

Wenn die Syntax ungültig ist, wird der find-Befehl einen Fehler ausgeben.

Überprüfe die Suchoptionen

Stelle sicher, dass du die richtigen Suchoptionen verwendest. Wenn du die falsche Option verwendest, werden dir möglicherweise nicht die gewünschten Ergebnisse angezeigt. Die Dokumentation zum find-Befehl enthält eine vollständige Liste der verfügbaren Optionen.

Überprüfe die Dateinamenmuster

Wenn du Dateinamenmuster verwendest, stelle sicher, dass sie korrekt sind. Wenn die Muster ungültig sind, werden dir möglicherweise nicht die gewünschten Ergebnisse angezeigt. Weitere Informationen zu Dateinamenmustern findest du in der Dokumentation zum find-Befehl.

Überprüfe die Ergebnisse

Es kann hilfreich sein, die Ergebnisse des find-Befehls zu überprüfen, um sicherzustellen, dass sie deinen Erwartungen entsprechen. Du kannst die Ergebnisse mit Befehlen wie ls oder grep filtern und anzeigen.

Weitere Fehlerbehebungsressourcen

Wenn du immer noch Probleme bei der Verwendung des find-Befehls hast, kannst du die folgenden Ressourcen zur Fehlerbehebung konsultieren:

Beispielhafte Verwendungsszenarien

Der Linux find-Befehl bietet unzählige Möglichkeiten, Dateien und Verzeichnisse zu suchen. Hier sind einige gängige und praktische Verwendungsszenarien, die deine Sucheffizienz steigern können:

Dateien nach Name suchen

Problem: Du musst eine bestimmte Datei mit einem bestimmten Namen oder Teilnamen finden.

Lösung: Verwende die Option -name.

find / -name "wichtige_datei.txt"

Dateien nach Typ suchen

Problem: Du benötigst eine Liste aller Dateien eines bestimmten Typs, z. B. reguläre Dateien, Verzeichnisse oder Symlinks.

Lösung: Verwende die Option -type.

find / -type f -print

Dateien nach Größe suchen

Problem: Du möchtest große oder kleine Dateien identifizieren, die Speicherplatz belegen.

Lösung: Verwende die Optionen -size und -cmin.

find / -size +50M -print
find / -cmin -30 -size +1G -print

Dateien nach Datum suchen

Problem: Du musst Dateien suchen, die innerhalb eines bestimmten Zeitraums geändert oder erstellt wurden.

Lösung: Verwende die Optionen -atime (Zugriffszeit), -mtime (Änderungszeit) und -ctime (Erstellungszeit).

find / -atime +10 -print
find / -mtime -1 -print

Dateien nach Eigentümer oder Gruppe suchen

Problem: Du benötigst eine Liste von Dateien, die einem bestimmten Benutzer oder einer bestimmten Gruppe gehören.

Lösung: Verwende die Optionen -user und -group.

find / -user username -print
find / -group groupname -print

Dateien nach Inhalt suchen

Problem: Du möchtest Text oder Muster innerhalb von Dateien suchen.

Lösung: Verwende das Tool xargs, um grep mit dem find-Befehl zu kombinieren.

find / -name "*.txt" -print0 | xargs -0 grep "Suchbegriff"

Drehen Sie die Suchergebnisse um

Manchmal kann es hilfreich sein, die Suchergebnisse umzukehren, um eine Liste von Dateien oder Verzeichnissen zu erhalten, die den angegebenen Kriterien nicht entsprechen. Dies kann z. B. nützlich sein, wenn Sie alle Dateien finden möchten, die nicht mit einem bestimmten Muster übereinstimmen, oder wenn Sie alle Verzeichnisse auflisten möchten, die nicht leer sind.

Um die Suchergebnisse umzukehren, kannst du die Option -not (! in älteren Versionen von find) verwenden. Diese Option negiert den nachfolgenden Ausdruck. Beispielsweise listet der folgende Befehl alle Dateien im aktuellen Verzeichnis auf, deren Name nicht mit \.txt endet:

find . -type f -not -name "*.txt"

Suche nach Dateien, die nicht einem Muster entsprechen

Wenn du nach Dateien suchen möchtest, die nicht einem bestimmten Muster entsprechen, kannst du die Option -not in Kombination mit der Option -name verwenden. Beispielsweise listet der folgende Befehl alle Dateien im aktuellen Verzeichnis auf, deren Name nicht mit \.jpg endet:

find . -type f -not -name "*.jpg"

Suche nach Verzeichnissen, die nicht leer sind

Wenn du nach Verzeichnissen suchen möchtest, die nicht leer sind, kannst du die Option -not in Kombination mit der Option -empty verwenden. Beispielsweise listet der folgende Befehl alle Verzeichnisse im aktuellen Verzeichnis auf, die nicht leer sind:

find . -type d -not -empty

Leere Dateien suchen

Benötigst du eine Möglichkeit, leere Dateien auf deinem Linux-System zu identifizieren? Der Linux find-Befehl kann dir dabei helfen.

Vorgehensweise

Um leere Dateien zu suchen, verwende folgende Syntax:

find [Suchpfad] -empty

Der Suchpfad gibt das Verzeichnis an, in dem du suchen möchtest.

Beispiel

Angenommen, du möchtest alle leeren Dateien im Verzeichnis "/home/alice" suchen, dann würdest du folgenden Befehl ausführen:

find /home/alice -empty

Optionen

Der find-Befehl bietet weitere Optionen zum Anpassen deiner Suche nach leeren Dateien:

  • -print0: Trennt die Ergebnisse durch ein Nullzeichen (ASCII-Code 0) statt durch einen Zeilenumbruch. Dies ist nützlich, wenn du die Ergebnisse an andere Befehle weiterleiten möchtest.
  • -exec Befehl;: Führt den angegebenen Befehl für jede gefundene leere Datei aus. Du kannst beispielsweise den Befehl rm verwenden, um leere Dateien zu löschen:
find /home/alice -empty -exec rm {} \;

Tipps

  • Verwende den Befehl mit Vorsicht, da er alle leeren Dateien in dem angegebenen Suchpfad löscht.
  • Wenn du nach leeren Ordnern suchen möchtest, verwende die Option -empty -type d.
  • Die Suche nach leeren Dateien kann einige Zeit in Anspruch nehmen, insbesondere wenn du nach einem großen Verzeichnis suchst.

Verzeichnisse suchen

Der find-Befehl hilft dir nicht nur, Dateien zu finden, sondern auch Verzeichnisse. Du kannst nach Verzeichnissen anhand von Kriterien wie dem Namen, den Berechtigungen oder dem Erstellungsdatum suchen.

Suche nach Verzeichnissen anhand des Namens

Um nach Verzeichnissen anhand des Namens zu suchen, verwende die Option -type d. Du kannst dann den Namen des Verzeichnisses angeben, nach dem gesucht werden soll.

find / -type d -name "Verzeichnisname"

Suche nach Verzeichnissen anhand des Erstellungsdatums

Du kannst auch nach Verzeichnissen anhand ihres Erstellungsdatums suchen. Verwende dazu die Option -mtime. Du kannst eine Zahl angeben, um nach Verzeichnissen zu suchen, die vor oder nach einer bestimmten Anzahl von Tagen erstellt wurden.

find / -type d -mtime -10

Dies sucht nach Verzeichnissen, die in den letzten 10 Tagen erstellt wurden.

Suche nach Verzeichnissen anhand der Berechtigungen

Du kannst auch nach Verzeichnissen anhand ihrer Berechtigungen suchen. Verwende dazu die Option -perm. Du kannst eine Oktalzahl angeben, um nach Verzeichnissen mit bestimmten Berechtigungen zu suchen.

find / -type d -perm 755

Dies sucht nach Verzeichnissen, die für den Besitzer Lese-, Schreib- und Ausführungsberechtigungen und für die Gruppe und andere Schreib- und Ausführungsberechtigungen haben.

Schreibe einen Kommentar