Website-Suche

Wie man ein Verzeichnis in Linux über die Kommandozeile findet


Schon einmal einen Ordner auf Ihrem Linux-Computer verlegt? Keine Sorge! Linux bietet leistungsstarke Kommandozeilenwerkzeuge, um diese fehlenden Verzeichnisse zu finden. Eines der vielseitigsten Werkzeuge ist der find-Befehl, mit dem Sie nach Verzeichnissen anhand verschiedener Kriterien suchen können. In diesem Leitfaden werden wir mehrere Möglichkeiten behandeln, wie Sie ein Verzeichnis auf Ihrem Linux-System finden können.

Zuerst zeigen wir Ihnen, wie Sie nach Verzeichnissen nach Namen suchen. Dann demonstrieren wir, wie man kürzlich geänderte Verzeichnisse und Verzeichnisse findet, die in den letzten N Tagen geändert wurden. Sie lernen auch, wie man ältere Verzeichnisse identifiziert - diejenigen, die vor mehr als N Tagen geändert wurden.

Als Nächstes behandeln wir die Suche nach Verzeichnissen innerhalb eines angegebenen Tiefenbereichs unter Verwendung der Optionen maxdepth und mindepth. Sie werden sehen, wie man Verzeichnisse basierend auf ihren Berechtigungen findet, sowie Verzeichnisse, die eine bestimmte Anzahl von Dateien enthalten.

Schließlich werden wir erklären, wie man nach leeren Verzeichnissen sucht, was nützlich sein kann, um ungenutzte oder unnötige Teile Ihres Dateisystems zu identifizieren.

Im gesamten Leitfaden werden wir praktische Beispiele geben, um Ihnen zu helfen, das Beste aus dem find-Befehl beim Arbeiten mit Verzeichnissen unter Linux herauszuholen.

Nach Verzeichnisname suchen

Wenn Sie den Namen des Verzeichnisses und den Startpunkt der Suche kennen, verwenden Sie diesen Befehl:

find /path/to/search -type d -name "directory_name"

Ersetzen Sie /path/to/search durch den tatsächlichen Pfad und "directory_name" durch das Zielverzeichnis.

Beispiel:

$ find ~/ -type d -name "Documents"

Dieser Befehl sucht nach Verzeichnissen mit dem Namen „Documents“ beginnend im Home-Verzeichnis des Benutzers (~/).

Hier ist eine Aufschlüsselung des Befehls:

  1. find ~/: Dies startet die Suche vom Home-Verzeichnis des Benutzers (~/).
  2. -type d: Dies sagt find, nach Verzeichnissen (-type d) statt nach regulären Dateien zu suchen.
  3. -name "Documents": Diese Option sagt find, nach Verzeichnissen mit dem Namen "Documents" zu suchen. Die Anführungszeichen um "Documents" stellen sicher, dass die Suche nach genau diesem Namen sucht und nicht nur nach Verzeichnissen, die das Wort "Documents" enthalten.

Dieser Befehl durchsucht also das Home-Verzeichnis des Benutzers und alle seine Unterverzeichnisse nach Verzeichnissen mit dem Namen „Documents“. Wenn welche gefunden werden, wird der vollständige Pfad zu diesen Verzeichnissen angezeigt.

Verzeichnisse im aktuellen Verzeichnis durchsuchen

Wenn Sie die Suche vom aktuellen Verzeichnis anstatt vom Home-Verzeichnis (~/) starten möchten, können Sie einfach den ~/-Teil des Befehls weglassen, so wie folgt:

$ find . -type d -name "Documents"

Hier ist die Aufschlüsselung dessen, was jede Option bewirkt:

  1. find .: Der . steht für das aktuelle Verzeichnis, daher beginnt die Suche im aktuellen Arbeitsverzeichnis.
  2. -type d: Dies sagt find, nach Verzeichnissen zu suchen.
  3. -name "Documents": Diese Option sagt find, nach Verzeichnissen mit dem Namen "Documents" zu suchen.

Der Befehl wird das aktuelle Verzeichnis und alle seine Unterverzeichnisse nach allen Verzeichnissen mit dem Namen „Documents“ durchsuchen und die vollständigen Pfade zu diesen Verzeichnissen ausgeben.

Alternativ können Sie auch die Variable $PWD verwenden, die das aktuelle Arbeitsverzeichnis darstellt, so wie folgt:

$ find $PWD -type d -name "Documents"

Beide Befehle erzielen dasselbe Ergebnis, indem sie die Suche vom aktuellen Verzeichnis aus starten.

Verwendung von -iname, um die Groß-/Kleinschreibung zu ignorieren

Dies ist eine ziemlich nützliche Option im find-Befehl.

Wir können die Option -iname anstelle von -name verwenden, um die Suche nicht groß-/kleinschreibungsempfindlich zu machen.

Hier ist das Beispiel unter Verwendung von -iname anstelle von -name:

$ find . -type d -iname "Documents"

Die -iname "Documents"-Option stimmt mit Verzeichnissen überein, deren Namen wie "Documents", "documents", "DOCUMENTS" usw. sind. Dies kann nützlich sein, wenn Sie sich nicht sicher über die genaue Groß- und Kleinschreibung des Verzeichnisnamens sind.

Die Hauptunterschiede zwischen -name und -iname sind:

  • -name führt eine Groß-/Kleinschreibung beachtende Suche durch, sodass nur Verzeichnisse mit der exakten Groß- und Kleinschreibung des angegebenen Musters übereinstimmen.
  • -iname führt eine groß-/kleinschreibungsunempfindliche Suche durch, sodass es Verzeichnisse unabhängig von ihrer Großschreibung findet.

Sie können den Suchbegriff auch innerhalb des Platzhalters wie folgt einfügen:

$ find . -type d -iname "*documents*"

Dieser Befehl listet alle Verzeichnisse im aktuellen Verzeichnis (und dessen Unterverzeichnisse) auf, die "documents" in ihren Namen haben.

Die Verwendung von -iname kann in Situationen bequemer sein, in denen Sie die genaue Groß- und Kleinschreibung des Verzeichnisnamens, den Sie suchen, nicht kennen oder sich nicht darum kümmern.

Persönlich bevorzuge ich es, die Option -iname mit dem Befehl find zu verwenden, wenn ich nach etwas suche.

Nach Verzeichnissen und Dateien suchen

Wenn Sie den Teil -type d aus dem find-Befehl entfernen, wird sowohl nach Dateien als auch nach Verzeichnissen gesucht, die den anderen Kriterien entsprechen, wie der -name- oder -iname-Option.

Der Befehl würde so aussehen:

$ find . -iname "Documents"

Hier ist, was passieren würde:

  1. Der find-Befehl wird das aktuelle Verzeichnis (.) und alle seine Unterverzeichnisse nach allen Elementen (sowohl Dateien als auch Verzeichnisse) mit dem Namen „Documents“ (Groß-/Kleinschreibung wird ignoriert) durchsuchen.
  2. Es wird sowohl Verzeichnisse mit dem Namen "Documents" als auch reguläre Dateien mit dem Namen "Documents" in den Ergebnissen enthalten.

Also würde die Ausgabe dieses Befehls Folgendes enthalten:

  • Alle Verzeichnisse, die "Documents", "documents", "DOCUMENTS" usw. heißen.
  • Alle regulären Dateien mit dem Namen "Documents", "documents", "DOCUMENTS" usw.

Das Entfernen des -type d-Teils macht die Suche breiter, da sie sowohl Verzeichnisse als auch Dateien umfasst, die dem angegebenen Namensmuster entsprechen.

Dies kann nützlich sein, wenn Sie sich nicht sicher sind, ob der Eintrag „Dokumente“, den Sie suchen, ein Verzeichnis oder eine Datei ist, und Sie alle Vorkommen davon finden möchten.

Wenn Sie jedoch speziell nach Verzeichnissen mit dem Namen "Documents" suchen, ist es besser, die Option -type d beizubehalten, um die Suche einzuschränken.

Zuletzt geänderte Verzeichnisse finden

Um Verzeichnisse aufzulisten, die in einem bestimmten Datumsbereich geändert wurden, verwenden Sie -newermt zweimal.

Zum Beispiel können Sie, um nach Verzeichnissen zu suchen, die zwischen dem 15. März 2024 und dem 15. April 2024 (ausschließlich) erstellt oder geändert wurden, Folgendes verwenden:

$ find /path/to/search -type d -newermt "2024-03-15" ! -newermt "2024-04-15"

Hier ist eine Aufschlüsselung des obigen Befehls:

  1. find /path/to/search: Dies sagt dem find-Befehl, die Suche im Verzeichnis /path/to/search zu starten.
  2. -type d: Diese Option stellt sicher, dass der find-Befehl nur nach Verzeichnissen sucht, nicht nach regulären Dateien.
  3. -newermt "2024-03-15": Diese Option sagt find, nur Verzeichnisse einzubeziehen, die neuer (erstellt oder geändert) als der 15. März 2024 sind.
  4. ! -newermt "2024-04-15": Das Symbol ! negiert die Bedingung, daher sagt dieser Teil find, Verzeichnisse auszuschließen, die neuer als der 15. April 2024 sind.

Die Kombination dieser Optionen führt dazu, dass find nach Verzeichnissen sucht, die am oder nach dem 15. März 2024 erstellt oder geändert wurden, jedoch vor dem 15. April 2024.

Dies kann zum Beispiel nützlich sein, wenn Sie alle Verzeichnisse finden möchten, die während eines bestimmten Zeitraums erstellt oder geändert wurden, zum Beispiel für Sicherungs- oder Prüfungszwecke.

Verzeichnisse finden, die in den letzten N Tagen geändert wurden

Um Verzeichnisse zu finden, die in den letzten n Tagen geändert wurden, verwenden Sie -mtime.

Der folgende Befehl sucht nach Verzeichnissen unter dem Verzeichnis ~/Projects/, die in den letzten 7 Tagen geändert wurden.

$ find ~/Projects/ -type d -mtime -7

Hier ist, was jeder Teil im Befehl macht:

  1. find ~/Projects/: Dies sagt dem find-Befehl, die Suche im Verzeichnis ~/Projects/ zu starten.
  2. -type d: Diese Option stellt sicher, dass der find-Befehl nur nach Verzeichnissen sucht, nicht nach regulären Dateien.
  3. -mtime -7: Diese Option sagt find, nur Verzeichnisse einzuschließen, die in den letzten 7 Tagen geändert wurden (das „m“ in „-mtime“ steht für „Änderungszeit“).

Der -mtime -7-Teil funktioniert wie folgt:

  • Das --Zeichen zeigt "weniger als" oder "innerhalb der letzten" an.
  • Die Zahl 7 steht für die Anzahl der Tage.

Dies kann zum Beispiel nützlich sein, wenn Sie alle neuen Verzeichnisse finden möchten, die kürzlich innerhalb Ihres ~/Projects/-Verzeichnisses erstellt oder aktualisiert wurden, möglicherweise für Sicherungs- oder Nachverfolgungszwecke.

Ältere Verzeichnisse identifizieren

Um Verzeichnisse zu finden, die vor mehr als N Tagen geändert wurden (d. h. (Verzeichnisse finden, die älter als N Tage sind)), verwenden Sie -mtime mit einem Pluszeichen.

Zum Beispiel wird der folgende Befehl nach Verzeichnissen im Verzeichnis ~/Projects/ suchen, die vor mehr als 7 Tagen geändert wurden.

$ find ~/Projects/ -type d -mtime +7

Mit anderen Worten, es wird Verzeichnisse finden, die in den letzten 7 Tagen nicht geändert (erstellt, aktualisiert oder aufgerufen) wurden.

Die Option -mtime +7 sagt find, nur Verzeichnisse einzuschließen, deren Änderungszeit ("m" in "-mtime") mehr als 7 Tage zurückliegt.

Dieser Befehl ist also nützlich, um Verzeichnisse zu finden, die für einen bestimmten Zeitraum nicht berührt oder geändert wurden, was bei Aufgaben wie der Identifizierung ungenutzter oder veralteter Verzeichnisse oder der Durchführung von Wartungs-/Aufräumarbeiten in Ihrer Projektverzeichnisstruktur hilfreich sein könnte.

Woher wissen wir, ob die Verzeichnisse wirklich vor mehr als X Tagen geändert wurden? Ganz einfach.

Um zu überprüfen, ob die von dem find-Befehl gefundenen Verzeichnisse vor mehr als 7 Tagen geändert wurden, können Sie den stat-Befehl verwenden, um die Änderungszeit jedes Verzeichnisses anzuzeigen.

$ find ~/Projects/ -type d -mtime +7 -exec stat -c '%n %y' {} \;

Hier ist die Erklärung für den obigen Befehl:

  1. find ~/Projects/ -type d -mtime +7: Dieser Teil des Befehls ist derselbe wie zuvor und findet Verzeichnisse, die älter als 7 Tage sind.
  2. -exec stat -c '%n %y' {} \;: Dieser Teil verwendet die -exec-Option von find, um den stat-Befehl auf jedes gefundene Verzeichnis auszuführen.
  • stat -c '%n %y': Der stat-Befehl zeigt den Dateinamen (%n) und die letzte Änderungszeit (%y) des Verzeichnisses an.
  • {}: Dies ist ein Platzhalter, der durch das aktuelle Verzeichnis ersetzt wird, das mit find gefunden wurde.
  • \;: Dies beendet den -exec-Befehl.

Wenn Sie diesen Befehl ausführen, werden der Pfad und die letzte Änderungszeit jedes Verzeichnisses angezeigt, das älter als 7 Tage ist. Dies ermöglicht es Ihnen zu überprüfen, dass die gefundenen Verzeichnisse tatsächlich vor mehr als 7 Tagen geändert wurden.

Hier ist ein Beispiel für die Ausgabe:

/home/ostechnix/Projects/Python 2024-03-22 14:18:14.958042173 +0530
/home/ostechnix/Projects/Vim 2024-03-22 14:05:55.887041168 +0530

Die in der Ausgabe angezeigte Änderungszeit hilft Ihnen, zu bestätigen, dass die Verzeichnisse tatsächlich älter als 7 Tage sind, wie es vom ursprünglichen find-Befehl verlangt wird.

Verwandt: Wie man Dateien findet und löscht, die älter als X Tage unter Linux sind

Durchsuche Verzeichnisse innerhalb eines angegebenen Bereichs

Wir können nach Verzeichnissen innerhalb eines angegebenen Tiefenbereichs suchen, indem wir die Optionen maxdepth und mindepth des find-Befehls verwenden.

Hier ist die Syntax:

find /path/to/search -mindepth X -maxdepth Y -type d

Lassen Sie mich erklären, was jede Option in diesem Befehl macht:

  1. find /path/to/search: Dies sagt dem find-Befehl, die Suche im Verzeichnis /path/to/search zu starten.
  2. -mindepth X: Diese Option legt die minimale Tiefe für die einzuschließenden Verzeichnisse in den Suchergebnissen fest. Der Wert X steht für die minimale Anzahl von Verzeichnisebenen vom Ausgangspunkt aus.
  3. -maxdepth Y: Diese Option legt die maximale Tiefenstufe für die Verzeichnisse fest, die in die Suchergebnisse einbezogen werden sollen. Der Wert Y steht für die maximale Anzahl an Verzeichnisebenen vom Startpunkt aus.
  4. -type d: Diese Option stellt sicher, dass der find-Befehl nur nach Verzeichnissen sucht, nicht nach regulären Dateien.

Bitte beachten Sie, dass die Option -mindepth vor anderen Argumenten, einschließlich -type, angegeben werden sollte.

Zum Beispiel, um nach Verzeichnissen zu suchen, die mindestens 2 Ebenen tief, aber nicht mehr als 4 Ebenen tief innerhalb des /Projects-Verzeichnisses sind, würden Sie den folgenden Befehl verwenden:

$ find ~/Projects -mindepth 2 -maxdepth 4 -type d

Dieser Befehl sucht nach Verzeichnissen, die relativ zum Verzeichnis /Projects zwischen 2 und 4 Ebenen tief liegen (einschließlich).

Sie können die Werte von X und Y an Ihre spezifischen Bedürfnisse anpassen. Zum Beispiel, wenn Sie nach Verzeichnissen suchen möchten, die genau 3 Ebenen tief sind, können Sie Folgendes verwenden:

$ find ~/Projects -mindepth 3 -maxdepth 3 -type d

Dies wird nur Verzeichnisse einschließen, die in den Suchergebnissen 3 Ebenen tief sind.

Die Verwendung von maxdepth und mindepth zusammen kann hilfreich sein, wenn Sie Ihre Suche auf einen bestimmten Bereich von Verzeichnistiefen eingrenzen möchten, was nützlich sein kann, um Ihr Dateisystem zu organisieren und zu verwalten.

Weitere Details zu maxdepth und mindepth finden Sie unter folgendem Link:

Wie man die Optionen maxdepth und mindepth mit dem Linux-Befehl find verwendet

Finde ein Verzeichnis basierend auf seinen Berechtigungen

Um Verzeichnisse basierend auf ihren Berechtigungen zu finden, können Sie den find-Befehl mit der -perm-Option verwenden.

find /path/to/search -type d -perm <permission_specification>

Ersetzen Sie /path/to/search durch das Verzeichnis, in dem Sie die Suche starten möchten, und <permission_specification> durch die gewünschte Berechtigung. Sie können die Berechtigung mit oktaler Notation angeben.

Erlauben Sie mir, Ihnen einige Beispiele zu zeigen.

Um alle Verzeichnisse im aktuellen Verzeichnis mit der Berechtigung 755 zu finden (d.h. rwx für den Besitzer und rx für Gruppe und andere):

$ find . -type d -perm 755

Um Verzeichnisse mit den Berechtigungen rwx für den Besitzer, r-x für die Gruppe und keinen Berechtigungen für andere zu finden:

$ find . -type d -perm 750

Um alle Verzeichnisse innerhalb von ~/Projects zu finden, die beliebige Berechtigungen für den Besitzer und r-x für Gruppe und andere haben:

$ find ~/Projects~ -type d -perm -005

Sie können die <permission_specification> entsprechend Ihren spezifischen Anforderungen anpassen. Zusätzlich können Sie die Optionen -maxdepth und -mindepth verwenden, um bei Bedarf die Tiefe der Suche zu steuern.

Finde Verzeichnisse, die eine bestimmte Anzahl von Dateien enthalten

Um Verzeichnisse zu finden, die eine bestimmte Anzahl von Dateien enthalten, können Sie eine Kombination aus find, wc und bash-Befehlen verwenden.

Beispiel:

Der folgende Befehl findet alle Verzeichnisse im aktuellen Verzeichnis und seinen Unterverzeichnissen, die genau 4 Dateien enthalten, und gibt den vollständigen Pfad dieser Verzeichnisse aus.

$ find . -type d -exec bash -c 'if [ $(find "$1" -maxdepth 1 -type f | wc -l) -eq 4 ]; then echo "$1"; fi' _ {} \;

Lassen Sie uns den Befehl Schritt für Schritt aufschlüsseln:

  1. find . -type d: Dies startet die Suche nach Verzeichnissen (nicht Dateien) aus dem aktuellen Verzeichnis (.).
  2. -exec bash -c '...' _ {} \;: Dieser Teil verwendet die exec-Option von find, um für jedes gefundene Verzeichnis ein eigenes Bash-Skript auszuführen.
  3. if [ $ (find "$1" -maxdepth 1 -type f | wc -l) -eq 4 ]; then echo "$1"; fi: Dies ist das benutzerdefinierte Bash-Skript, das für jedes Verzeichnis ausgeführt wird.
  • $ (find "$1" -maxdepth 1 -type f | wc -l): Dieser Teil zählt die Anzahl der Dateien (nicht der Verzeichnisse) im aktuellen Verzeichnis ("$1"). Die Option -maxdepth 1 stellt sicher, dass nur die Dateien im aktuellen Verzeichnis gezählt werden, nicht in Unterverzeichnissen.
  • [ ... -eq 4 ]: Dies überprüft, ob die Anzahl der Dateien im aktuellen Verzeichnis genau 4 ist.
  • then echo $1"; fi: Wenn die Bedingung wahr ist (das Verzeichnis genau 4 Dateien enthält), wird der vollständige Pfad des Verzeichnisses ausgegeben.

Dies kann nützlich sein, zum Beispiel, wenn Sie eine bestimmte Menge von Verzeichnissen haben, die eine bestimmte Anzahl von Dateien enthalten sollten, und Sie schnell alle Verzeichnisse identifizieren möchten, die diese Kriterien nicht erfüllen.

Nach leeren Verzeichnissen suchen

Um leere Verzeichnisse zu finden, verwenden Sie das -empty-Flag:

find /path/to/search -type d -empty

Zum Beispiel, um innerhalb des Verzeichnisses „Work“ nach leeren Verzeichnissen zu suchen, führen Sie aus:

$ find ~/Work/ -type d -empty

Denken Sie daran, die Pfade nach Bedarf anzupassen.

Fazit

In diesem Leitfaden haben Sie mehrere Techniken zum Verwenden des find-Befehls zum Suchen von Verzeichnissen in Ihrem Linux-System gelernt.

Sie können nach Name, wie kürzlich es geändert wurde, oder wie viele Dateien darin enthalten sind, suchen. Sie können sogar leere Ordner oder solche mit bestimmten Berechtigungen finden.

Indem Sie verstehen, wie man Optionen wie maxdepth, mindepth und size verwendet, können Sie Ihre Suchen verfeinern, um sich auf die spezifischen Verzeichnisse zu konzentrieren, die Sie benötigen.

Also keine Panik, wenn beim nächsten Mal ein Ordner fehlt! Verwenden Sie diese find-Befehle, um ihn aufzuspüren und Ihre Dateien organisiert zu halten.

Verwandte Lektüre:

  • Fd: Die Find-Befehl-Alternative zum Beherrschen der Dateisuche in Linux
  • So finden Sie die Größe eines Verzeichnisses unter Linux
  • 15 essentielle Linux-Befehle, die jeder Anfänger kennen sollte