Harting Development

Verzeichnis in Linux finden: So funktioniert's ganz einfach

Lukas Fuchs vor 8 Monaten in  Tipps und Tricks 3 Minuten Lesedauer

Was ist der Befehl 'find' und wofür wird er verwendet?

Der Befehl find ist ein leistungsstarkes Tool in Linux, mit dem du nach Dateien und Verzeichnissen auf deinem System suchen kannst. Er bietet eine Vielzahl von Optionen und Parametern, mit denen du die Suche nach deinen spezifischen Anforderungen anpassen kannst.

Egal, ob du versuchst, eine verlegte Datei aufzuspüren oder Verzeichnisse mit bestimmten Merkmalen zu identifizieren, der Befehl find ist dein zuverlässiger Verbündeter. Hier sind einige gängige Verwendungsfälle:

Nach verlorenen Dateien suchen

Stell dir vor, du verlierst eine wichtige Datei und erinnerst dich nicht mehr an ihren Namen oder Speicherort. Mit find kannst du das gesamte System nach Dateien durchsuchen, die bestimmte Kriterien erfüllen, wie z. B. einen Teil des Dateinamens oder den letzten Änderungszeitpunkt.

Verzeichnisse verwalten

find ist auch ein wertvolles Werkzeug für die Verwaltung deiner Verzeichnisse. Du kannst damit nach Verzeichnissen mit bestimmten Namen suchen, die leer sind, versteckte Dateien enthalten oder bestimmten Berechtigungen entsprechen. So kannst du deine Verzeichnisstruktur optimieren und unnötige Dateien entfernen.

Syntax und Optionen des Befehls 'find'

Die Syntax des Befehls 'find' ist wie folgt:

find [Pfad] [Optionen] [Ausdrücke]

Dabei ist:

  • [Pfad]: Das Verzeichnis, in dem du nach Verzeichnissen suchen möchtest.
  • [Optionen]: Optionale Parameter, die das Suchverhalten anpassen.
  • [Ausdrücke]: Kriterien, die Verzeichnisse identifizieren, nach denen du suchst.

Wichtige Optionen

Es gibt eine Vielzahl von Optionen, die du verwenden kannst, um deine Suche anzupassen. Zu den wichtigsten gehören:

  • -name PATTERN Sucht nach Verzeichnissen, die dem Muster PATTERN entsprechen.
  • -iname PATTERN Sucht nach Verzeichnissen, die dem Muster PATTERN entsprechen, wobei die Groß-/Kleinschreibung ignoriert wird.
  • -path PATTERN Sucht nach Verzeichnissen, deren Pfad dem Muster PATTERN entspricht.
  • -type d Sucht nur nach Verzeichnissen.
  • -maxdepth N Begrenzt die Suche auf die angegebene Tiefe N.
  • -mindepth N Startet die Suche erst ab der angegebenen Tiefe N.
  • -perm MODUS Sucht nach Verzeichnissen mit den angegebenen Berechtigungsmodi. MODUS kann entweder eine oktale Zahl oder ein Buchstabenkürzel für die Berechtigungen sein (z. B. u+rwx für Leseberechtigung für den Besitzer).
  • -group GRUPPE Sucht nach Verzeichnissen, die der angegebenen Gruppe gehören.
  • -user BENUTZER Sucht nach Verzeichnissen, die dem angegebenen Benutzer gehören.
  • -hidden Sucht nach versteckten Verzeichnissen (Verzeichnisse, die mit einem Punkt beginnen).

Verwenden von Ausdrücken

Du kannst mehrere Ausdrücke verwenden, um deine Suche zu verfeinern. Ausdrücke werden mit logischen Operatoren wie -a (UND), -o (ODER) und ! (NICHT) kombiniert.

Beispiel:

find /home -name "Dokumente" -a -type d

Diese Suche findet alle Verzeichnisse mit dem Namen "Dokumente" unter dem Pfad "/home".

Nach Verzeichnissen mit einem bestimmten Namen suchen

Möchtest du ein Verzeichnis mit einem bestimmten Namen finden? Nichts leichter als das!

Suche nach einem exakten Verzeichnisnamen

Um nach einem Verzeichnis mit einem exakten Namen zu suchen, verwende die folgende Syntax:

find [startverzeichnis] -name "verzeichnisname"

Beispiel:

find /home -name "Dokumente" # Sucht nach dem Verzeichnis "Dokumente" im Verzeichnis "/home"

Suche nach einem Verzeichnisnamen, der ein Muster enthält

Möchtest du nach einem Verzeichnis suchen, dessen Name ein bestimmtes Muster enthält? Verwende dann die Option -name mit dem Muster als Argument:

find [startverzeichnis] -name "*muster*"

Beispiel:

find /home -name "*Dokumente*" # Sucht nach Verzeichnissen, die "Dokumente" im Namen enthalten

Umkehrsuche: Suche nach Verzeichnissen, die NICHT einen bestimmten Namen haben

Mithilfe der Option -prune kannst du eine Umkehrsuche durchführen und nach Verzeichnissen suchen, die NICHT einen bestimmten Namen haben:

find [startverzeichnis] -prune -o -name "verzeichnisname"

Beispiel:

find /home -prune -o -name "*Dokumente*" # Sucht nach Verzeichnissen, die NICHT "Dokumente" im Namen enthalten

Nach Verzeichnissen suchen, die eine bestimmte Bedingung erfüllen

Über den Befehl find kannst du auch nach Verzeichnissen suchen, die eine bestimmte Bedingung erfüllen. Dies ist sehr nützlich, wenn du nach Verzeichnissen mit bestimmten Eigenschaften suchst, z. B. solchen, die bestimmte Dateien enthalten oder eine bestimmte Größe haben.

Nach Verzeichnissen suchen, die eine bestimmte Datei enthalten

Um nach Verzeichnissen zu suchen, die eine bestimmte Datei enthalten, verwende die Option -name zusammen mit dem Dateinamen. Beispielsweise sucht der folgende Befehl nach Verzeichnissen, die die Datei myfile.txt enthalten:

find / -name myfile.txt -type d

Nach Verzeichnissen mit einer bestimmten Größe suchen

Um nach Verzeichnissen mit einer bestimmten Größe zu suchen, verwende die Option -size. Du kannst die Größe in Bytes, Kilobytes (K) oder Megabytes (M) angeben. Beispielsweise sucht der folgende Befehl nach Verzeichnissen, die größer als 100 Kilobytes sind:

find / -size +100K -type d

Nach Verzeichnissen suchen, die eine bestimmte Berechtigungsstufe haben

Um nach Verzeichnissen mit einer bestimmten Berechtigungsstufe zu suchen, verwende die Option -perm. Du kannst die Berechtigungsstufe in oktaler Notation (z. B. 644) oder mit der symbolischen Notation (z. B. rwxr-xr-x) angeben. Beispielsweise sucht der folgende Befehl nach Verzeichnissen, die für alle Benutzer lesbar sind:

find / -perm -444 -type d

Weitere Bedingungen

Neben diesen grundlegenden Bedingungen kannst du auch nach Verzeichnissen suchen, die einer bestimmten Gruppe oder einem bestimmten Benutzer gehören, versteckte Verzeichnisse sind oder nach ihrem Erstellungs- oder Änderungsdatum. Die Möglichkeiten sind nahezu unbegrenzt.

Denke daran, dass du mehrere Bedingungen kombinieren kannst, um deine Suche noch spezifischer zu gestalten. Experimentiere mit den verschiedenen Optionen und finde heraus, wie du find für deine spezifischen Anforderungen nutzen kannst.

Nach Verzeichnissen innerhalb einer bestimmten Tiefe suchen

Oftmals benötigst du lediglich Verzeichnisse, die sich innerhalb einer bestimmten Verschachtelungstiefe befinden. Der Befehl find bietet dir auch dafür eine Option.

Maximale Tiefe angeben

Um die maximale Tiefe anzugeben, verwendest du die Option -maxdepth.

Syntax:

find [Pfad] -maxdepth [Tiefe]

Beispiel:

find / -maxdepth 2

Dieser Befehl sucht nach Verzeichnissen unterhalb des Stammverzeichnisses /, die sich innerhalb von zwei Ebenen befinden.

Minimale Tiefe angeben

Andererseits kannst du auch die minimale Tiefe angeben. Verzeichnisse, die sich oberhalb dieser Tiefe befinden, werden ignoriert.

Option: -mindepth

Syntax:

find [Pfad] -mindepth [Tiefe]

Beispiel:

find / -mindepth 3

Dieser Befehl sucht nach Verzeichnissen unterhalb des Stammverzeichnisses, die sich mindestens in der dritten Ebene befinden.

Maximale und minimale Tiefe kombinieren

Du kannst auch die minimale und maximale Tiefe kombinieren, um die Suche auf einen bestimmten Bereich zu beschränken.

Syntax:

find [Pfad] -mindepth [Min. Tiefe] -maxdepth [Max. Tiefe]

Beispiel:

find / -mindepth 2 -maxdepth 4

Dieser Befehl sucht nach Verzeichnissen unterhalb des Stammverzeichnisses, die sich zwischen der zweiten und vierten Ebene befinden.

Nach Verzeichnissen mit bestimmten Berechtigungen suchen

Wenn du nach Verzeichnissen suchen möchtest, die bestimmte Berechtigungen haben, kannst du die Option -perm verwenden. Diese Option akzeptiert ein numerisches Argument, das die Oktalberechtigung darstellt, nach der du suchen möchtest.

Wie kann ich nach Verzeichnissen mit Lese-, Schreib- und Ausführungsberechtigungen suchen?

Um beispielsweise nach Verzeichnissen mit Lese-, Schreib- und Ausführungsberechtigungen für den Dateibesitzer (chmod 700) zu suchen, würdest du folgenden Befehl verwenden:

find / -type d -perm 700

Wie kann ich nach Verzeichnissen mit Gruppen-Schreibrechten suchen?

Du kannst auch nach Verzeichnissen suchen, die bestimmte Gruppenrechte haben. Um beispielsweise nach Verzeichnissen mit Schreibrechten für die Gruppe zu suchen, würdest du folgenden Befehl verwenden:

find / -type d -perm -g=w

Wie kann ich nach Verzeichnissen mit anderen Berechtigungen suchen?

Du kannst auch nach Verzeichnissen mit anderen Berechtigungen suchen, z. B. nach schreibgeschützten Verzeichnissen oder nach Verzeichnissen, auf die alle Benutzer zugreifen können. Hier sind einige Beispiele:

  • Um nach schreibgeschützten Verzeichnissen zu suchen, verwende die Option -perm -w-w-w:
find / -type d -perm -w-w-w
  • Um nach Verzeichnissen zu suchen, auf die alle Benutzer zugreifen können, verwende die Option -perm -a=rwx:
find / -type d -perm -a=rwx

Indem du die Option -perm verwendest, kannst du nach Verzeichnissen mit beliebiger Kombination von Berechtigungen suchen. Dies kann nützlich sein, um Verzeichnisse zu finden, die möglicherweise falsch konfiguriert sind oder die Sicherheitsrisiken darstellen.

Nach Verzeichnissen suchen, die einer bestimmten Gruppe oder einem bestimmten Benutzer gehören

Oftmals musst du nur nach Verzeichnissen suchen, die einer bestimmten Gruppe oder einem bestimmten Benutzer gehören. Mit dem Befehl find kannst du diese Suche einfach durchführen.

Nach Verzeichnissen suchen, die einer bestimmten Gruppe gehören

Um nach Verzeichnissen zu suchen, die einer bestimmten Gruppe gehören, verwendest du die Option -group.

find / -group <gruppenname>

Beispielsweise suchst du nach Verzeichnissen, die der Gruppe marketing gehören:

find / -group marketing

Nach Verzeichnissen suchen, die einem bestimmten Benutzer gehören

Um nach Verzeichnissen zu suchen, die einem bestimmten Benutzer gehören, verwendest du die Option -user.

find / -user <benutzername>

Beispielsweise suchst du nach Verzeichnissen, die dem Benutzer john gehören:

find / -user john

Nach versteckten Verzeichnissen suchen

Versteckte Verzeichnisse sind Ordner, die mit einem Punkt (.) beginnen und dadurch im Dateimanager und bei der Ausführung des Befehls "ls" standardmäßig nicht angezeigt werden. Diese Option dient dazu, wichtige Systemdateien und Konfigurationsdateien vor versehentlichen Änderungen zu schützen.

Verwendung des Schalters -type

Zum Suchen nach versteckten Verzeichnissen kannst du den Schalter -type zusammen mit dem Argument d verwenden, der angibt, dass du nach Verzeichnissen suchst. So kannst du beispielsweise den folgenden Befehl ausführen:

find /home -type d -name '.*'

Dieser Befehl durchsucht das Verzeichnis /home und alle seine Unterverzeichnisse nach Verzeichnissen, die mit einem Punkt beginnen.

Verwendung des Schalters -exec

Alternativ kannst du den Schalter -exec verwenden, um einen Befehl auszuführen, wenn ein Kriterium erfüllt ist. Im folgenden Beispiel wird der Befehl ls -ld ausgeführt, um die Details versteckter Verzeichnisse auszugeben:

find /home -type d -name '.*' -exec ls -ld '{}' \;

Berücksichtigung versteckter Verzeichnisse in anderen Befehlen

Beachte, dass versteckte Verzeichnisse in den meisten Befehlen standardmäßig nicht berücksichtigt werden. Um sie einzuschließen, musst du den Schalter -a (alle) verwenden. Beispielsweise:

ls -a /home

Dies gibt sowohl reguläre als auch versteckte Verzeichnisse im Verzeichnis /home aus.

Nach Verzeichnissen anhand ihres Inhalts suchen

Manchmal musst du Verzeichnisse finden, die bestimmte Inhalte enthalten. Dies kann hilfreich sein, wenn du nach bestimmten Dateien suchst oder wenn du Verzeichnisse bereinigen möchtest, die unnötigen Speicherplatz belegen.

Um Verzeichnisse anhand ihres Inhalts zu suchen, kannst du die Option -print0 zusammen mit dem Befehl xargs verwenden.

-print0 Option

Die Option -print0 bewirkt, dass find den Pfad jedes übereinstimmenden Verzeichnisses mit einem Nullbyte (\0) beendet. Dies ist nützlich, wenn die Pfade Leerzeichen enthalten, da Leerzeichen sonst den Befehl xargs verwirren würden.

Befehl xargs

Der Befehl xargs liest Standardinput zeilenweise ein und führt einen angegebenen Befehl für jede Zeile aus. In diesem Fall verwenden wir xargs um die Pfade aus dem Befehl find als Argumente für den Befehl find zu übergeben.

Beispiel

Um beispielsweise nach Verzeichnissen zu suchen, die die Datei example.txt enthalten, kannst du den folgenden Befehl verwenden:

find . -type d -print0 | xargs -0 find -name example.txt

Dieser Befehl sucht rekursiv im aktuellen Verzeichnis (-type d) nach Verzeichnissen (-name example.txt) mit dem Namen example.txt. Die Option -0 bewirkt, dass xargs die aus find übergebenen Pfade mit einem Nullbyte beendet, und die Option -print0 bewirkt, dass find die Pfade mit einem Nullbyte beendet.

Du kannst die Option -print0 auch mit anderen Befehlen verwenden, um Verzeichnisse anhand ihres Inhalts zu suchen. Beispielsweise kannst du die Option -regex verwenden, um nach Verzeichnissen zu suchen, die einem bestimmten regulären Ausdruck entsprechen.

Zusätzliche Tipps

  • Du kannst die Option -exec anstelle von -print0 | xargs verwenden, um den Befehl find direkt für jedes übereinstimmende Verzeichnis auszuführen.
  • Die Option -maxdepth kann verwendet werden, um die Tiefe der Suche zu begrenzen.
  • Die Option -mindepth kann verwendet werden, um die Mindesttiefe der Suche anzugeben.

Nach Verzeichnissen anhand ihres Erstellungs- oder Änderungsdatums suchen

Du kannst den Befehl find verwenden, um Verzeichnisse anhand ihres Erstellungs- oder Änderungsdatums zu suchen. Dies kann hilfreich sein, wenn du nach Verzeichnissen suchst, die zu einem bestimmten Zeitpunkt erstellt oder geändert wurden.

Erstellungsdatum

Um nach Verzeichnissen zu suchen, die an einem bestimmten Datum erstellt wurden, verwende die Option -ctime. Diese Option gibt die Anzahl der Tage an, die seit der Erstellung des Verzeichnisses vergangen sind.

find / -ctime 0 -type d

Dieser Befehl sucht nach allen Verzeichnissen im Root-Verzeichnis, die heute erstellt wurden.

Änderungsdatum

Um nach Verzeichnissen zu suchen, die an einem bestimmten Datum geändert wurden, verwende die Option -mtime. Diese Option gibt die Anzahl der Tage an, die seit der Änderung des Verzeichnisses vergangen sind.

find / -mtime 0 -type d

Dieser Befehl sucht nach allen Verzeichnissen im Root-Verzeichnis, die heute geändert wurden.

Zwischen zwei Datumsangaben suchen

Du kannst auch nach Verzeichnissen suchen, die zwischen zwei Datumsangaben erstellt oder geändert wurden. Verwende dazu die Optionen -newer und -older.

find / -newer datei -type d

Dieser Befehl sucht nach allen Verzeichnissen im Root-Verzeichnis, die neuer als die angegebene Datei sind.

find / -older datei -type d

Dieser Befehl sucht nach allen Verzeichnissen im Root-Verzeichnis, die älter als die angegebene Datei sind.

Beispiele

  • Um nach Verzeichnissen zu suchen, die in den letzten 7 Tagen erstellt wurden, verwende folgenden Befehl:
find / -ctime -7 -type d
  • Um nach Verzeichnissen zu suchen, die in den letzten 30 Tagen geändert wurden, verwende folgenden Befehl:
find / -mtime -30 -type d
  • Um nach Verzeichnissen zu suchen, die zwischen dem 1. Januar 2023 und dem 1. Februar 2023 erstellt wurden, verwende folgenden Befehl:
find / -newer '2023-01-01' -older '2023-02-01' -type d

Umkehrsuche: Nach Verzeichnissen suchen, die eine bestimmte Bedingung NICHT erfüllen

Manchmal möchtest du möglicherweise nach Verzeichnissen suchen, die eine bestimmte Bedingung nicht erfüllen. Dies ist mit dem Befehl find möglich, indem du das Präfix ! vor der Bedingung verwendest.

Verwendung des !-Präfixes

Um nach Verzeichnissen zu suchen, die eine bestimmte Bedingung NICHT erfüllen, verwendest du das Präfix ! vor der Bedingung. Beispielsweise kannst du mit folgendem Befehl nach Verzeichnissen suchen, die nicht den Namen "downloads" haben:

find / -type d -name "downloads"

Verwendung von ! in Kombination mit anderen Optionen

Du kannst das !-Präfix in Kombination mit anderen Optionen des Befehls find verwenden. Beispielsweise kannst du mit folgendem Befehl nach Verzeichnissen suchen, die nicht in einem Unterverzeichnis namens "bin" liegen:

find / -type d -not -path "*/bin/*"

Vermeidung von Überschneidungen mit anderen Abschnitten

Dieser Abschnitt konzentriert sich speziell auf die Umkehrsuche. Bitte beachte, dass die Suche nach Verzeichnissen, die eine bestimmte Bedingung erfüllen, in anderen Abschnitten dieser Gliederung behandelt wird.

Häufig gestellte Fragen:

  • Wie kann ich nach Verzeichnissen suchen, die nicht leer sind?

    • Verwende -not -empty.
  • Wie kann ich nach Verzeichnissen suchen, die kein Schreibzugriffsrecht für Benutzer haben?

    • Verwende -not -perm -0200.
  • Wie kann ich nach Verzeichnissen suchen, die nicht einer bestimmten Gruppe gehören?

    • Verwende -not -group Gruppe.

Durch die Nutzung des !-Präfixes kannst du die Flexibilität des Befehls find erhöhen und die genauen Verzeichnisse finden, die deinen Anforderungen entsprechen.

Folge uns

Neue Posts

Beliebte Posts