Wie man Dateien in Linux mit der Kommandozeile findet

find ist ein Befehl zum rekursiven Filtern von Objekten im Dateisystem auf der Grundlage eines einfachen bedingten Mechanismus. Verwenden Sie find, um nach einer Datei oder einem Verzeichnis in Ihrem Dateisystem zu suchen. Mit dem Flag -exec können Dateien im selben Befehl gefunden und sofort verarbeitet werden.

Linux-Dateien nach Name oder Erweiterung suchen

Verwenden Sie find auf der Befehlszeile, um eine bestimmte Datei nach Name oder Erweiterung zu suchen. Das folgende Beispiel sucht nach *.err Dateien im Verzeichnis /home/username/ und allen Unterverzeichnissen:

find /home/username/ -name "*.err"

Sie sollten eine ähnliche Ausgabe in Ihrer Konsole sehen:

 /home/username/example.errThe matching file in the /home/username/ directory is "example.err"

Gebräuchliche Linux-Suchbefehle und Syntax

Der find-Befehl hat normalerweise die folgende Form:

find options starting/path expression
  • Das options-Attribut steuert das Verhalten und die Optimierungsmethode des find-Prozesses.
  • Das starting/path-Attribut definiert das oberste Verzeichnis, in dem find mit der Filterung beginnt.
  • Das expression-Attribut steuert die Tests, die die Verzeichnishierarchie durchsuchen, um die Ausgabe zu erzeugen.

Dateien in Linux über den Dateinamen suchen

Um eine Datei über den Dateinamen zu finden, verwenden Sie die Syntax find -name filename. Wenn Sie den Pfad weglassen, wird die Datei auf der gesamten Festplatte gesucht. Sie können zum Beispiel eine Datei mit dem Namen example.err im Verzeichnis /home/username mit dem folgenden Befehl suchen:

find -name example.err

Sie sollten eine ähnliche Ausgabe sehen:

 ./username/example.err

Suchen Sie eine Datei in Ihrem aktuellen Verzeichnis mit dem Find-Befehl

Schauen Sie sich die Beispielverzeichnisstruktur und die Dateien an. Auf sie wird in den Beispielen dieses Handbuchs Bezug genommen.

 ├── directory_1│ ├── subdirectory_1│ │ └── example.err│ └── example.err├── directory_2│ └── example.err├── directory_3│ └── example.err├── image01.png├── web_files│ ├── app.html│ ├── cb=gapi.loaded_0│ ├── edit.html│ ├── m=_b,_tp│ ├── rs=AA2YrTtgyE1yYXiu-GuLS6sbJdYr0u8VBQ│ ├── rs=AA2YrTvod91nzEJFOvvfJUrn6_vLwwY0bw│ ├── saved_resource.html│ ├── single.html│ └── unnamed.jpg├── web.html└── example.err

Wenn Sie sich in directory_1 befinden und die Datei example.err innerhalb des Verzeichnisses oder eines seiner Unterverzeichnisse suchen, können Sie den folgenden Befehl eingeben:

find . -name example.err

Ihre Ausgabe sieht folgendermaßen aus:

 ./example.err./directory_1/example.err

Die Ausgabe spiegelt die Verzeichnisstruktur von directory_1 wider:

 ├── directory_1│ ├── subdirectory_1│ │ └── example.err│ └── example.err

Find Image Files in Linux Using the Command Line

Bezugnehmend auf die Dateistruktur im vorherigen Abschnitt gibt es ein Image mit dem Namen image01.png, das sich im Stamm (/) der Verzeichnisstruktur befindet.

Um die Datei image01.png zu finden, führen Sie den folgenden findBefehl aus, der alle .pngDateien im Verzeichnis / sucht:

find -name *.png

Sie sollten eine ähnliche Ausgabe sehen:

 ./image01.png

Ändern Sie den Bilddateityp und suchen Sie nach allen .jpgDateien im Stammverzeichnis (/):

find -name *.jpg

Die Ausgabe ähnelt dem Beispiel. Beziehen Sie sich auf die Beispielverzeichnisstruktur im vorherigen Abschnitt, um den Speicherort der Datei zu sehen.

 ./web_files/unnamed.jpg

Finden Sie eine leere Datei in Ihrem Verzeichnis mithilfe der Befehlszeile

Um eine leere Datei in Ihrem Verzeichnis mithilfe der Befehlszeile zu finden, geben Sie den folgenden Befehl ein:

find . -type f -empty

Wenn keine Ausgabe zurückgegeben wird, dann gibt es keine leere Datei in Ihrem aktuellen Verzeichnis.

Optionen und Optimierungen für die Dateisuche in Linux über die Befehlszeile

Die Standardkonfiguration für find ignoriert symbolische Links. Wenn Sie möchten, dass find symbolische Links verfolgt und zurückgibt, fügen Sie dem Befehl die Option -L hinzu, wie unten gezeigt:

find -O3 -L /var/www/ -name "*.html"

Dieser Befehl aktiviert die maximale Optimierungsstufe (-O3) und ermöglicht find, symbolischen Links zu folgen (-L). find durchsucht den gesamten Verzeichnisbaum unterhalb von /var/www/ nach Dateien, die mit .html enden.

find optimiert seine Filterstrategie, um die Leistung zu steigern. Drei vom Benutzer auswählbare Optimierungsstufen werden als -O1, -O2 und -O3 angegeben. Die -O1-Optimierung ist die Standardeinstellung und zwingt find zur Filterung auf der Grundlage des Dateinamens, bevor alle anderen Tests ausgeführt werden.

Die Optimierung auf der Ebene -O2 priorisiert die Filterung auf der Grundlage des Dateinamens, wie bei -O1, und führt dann alle Filterungen auf der Grundlage des Dateityps aus, bevor sie mit anderen ressourcenintensiveren Bedingungen fortfährt. Die Optimierung auf Ebene -O3 ermöglicht find die strengste Optimierung und ordnet alle Tests basierend auf ihrem relativen Aufwand und der Wahrscheinlichkeit ihres Erfolgs neu an.

Befehl Beschreibung
-O1 Filter basierend auf Dateinamen zuerst (Standard).
-O2 Dateiname zuerst, dann Dateityp.
-O3 Erlaubt find die automatische Neuordnung der Suche basierend auf der effizienten Nutzung von Ressourcen und der Wahrscheinlichkeit. Erfolg
-maxdepth X Das aktuelle Verzeichnis sowie alle Unterverzeichnisse X Ebenen tief durchsuchen.
-iname Suchen ohne Rücksicht auf Textfall.
-not Nur Ergebnisse zurückgeben, die nicht mit dem Testfall übereinstimmen.
-type f Suchen Sie nach Dateien.
-type d Suchen Sie nach Verzeichnissen.

Finden Sie Dateien in Linux nach Änderungszeitpunkt mit der Befehlszeile

Der Befehl find kann eine Verzeichnishierarchie danach filtern, wann eine Datei zuletzt geändert wurde. Der folgende Befehl findet beispielsweise alle Dateien mit der Erweiterung .err, die in den letzten 7 Tagen geändert wurden:

find / -name "*err" -mtime -7

Der Beispielbefehl gibt die folgende Ausgabe zurück:

 /home/username/directory_3/example.err/home/username/username/example.err/home/username/username/directory_2/example.err/home/username/username/directory_1/example.err/home/username/username/directory_1/subdirectory_1/example.err

Verwenden Sie Grep, um Dateien in Linux mithilfe der Befehlszeile zu finden

Der Befehl find kann die Verzeichnishierarchie nur anhand des Namens und der Metadaten einer Datei filtern. Wenn Sie nach dem Inhalt der Datei suchen müssen, verwenden Sie ein Tool wiegrep. Betrachten Sie das folgende Beispiel:

find . -type f -exec grep "test" '{}' \; -print

Dieser Befehl durchsucht jedes Objekt in der aktuellen Verzeichnishierarchie (.), das eine Datei (-type f) ist, und führt dann den Befehl grep "test" für jede Datei aus, die die Bedingungen erfüllt. Die Dateien, die den Bedingungen entsprechen, werden auf dem Bildschirm (-print) ausgegeben. Die geschweiften Klammern ({}) sind ein Platzhalter für die Suchergebnisse. Die {} sind in einfache Anführungszeichen (') eingeschlossen, um zu vermeiden, dass grep einen falsch geformten Dateinamen erhält. Der -exec-Befehl wird mit einem Semikolon (;) abgeschlossen, das mit einem Escapezeichen (\;) versehen werden sollte, um eine Interpretation durch die Shell zu vermeiden.

Die im Beispiel verwendete Datei (example.err) enthält Text mit dem Wort „test“. Wenn Sie den Beispielbefehl ausführen, sehen Sie eine ähnliche Ausgabe:

 test./directory_3/example.errtest./example.errtest./directory_2/example.errtest./directory_1/example.errtest./directory_1/subdirectory_1/example.err

Grep identifiziert jede Datei im aktuellen Arbeitsverzeichnis, die die Zeichenfolge „test“ enthält.

Hinweis

Vor der Implementierung der Option -exec durch den Befehl find konnten Sie mit dem Befehl xargs eine ähnliche Ausgabe wie im obigen Beispiel erzeugen:

find . -type f -print | xargs grep "test"

Verarbeiten und Suchen von Dateien mit dem Befehl Find in Linux

Die Option -exec führt Befehle für jedes Objekt aus, das dem Ausdruck find entspricht. Betrachten Sie das folgende Beispiel:

find . -name "example.err" -exec chmod o+r '{}' \;

Dies filtert jedes Objekt in der aktuellen Hierarchie (.) nach Dateien mit dem Namen rc.conf und führt den Befehl chmod o+r aus, um die Dateiberechtigungen der Ergebnisse des Befehls find zu ändern.

Der Beispielbefehl führt die Option -exec im Stammverzeichnis des Prozesses find aus und führt sie aus. Verwenden Sie -execdir, um den angegebenen Befehl in dem Verzeichnis auszuführen, in dem sich die Übereinstimmung befindet. Dies kann Sicherheitsbedenken ausräumen und bei einigen Vorgängen zu einer besseren Leistung führen.

Die Optionen -exec oder -execdir werden ohne weitere Eingabeaufforderungen ausgeführt. Wenn Sie es vorziehen, vor der Ausführung einer Aktion gefragt zu werden, ersetzen Sie -exec durch -ok oder -execdir durch -okdir.

Wie Sie Dateien mit der Linux-Befehlszeile suchen und löschen

Vorsicht

Verwenden Sie diese Option mit äußerster Vorsicht.

Fügen Sie die Option -delete am Ende eines Übereinstimmungsausdrucks hinzu, um alle Dateien zu löschen, die übereinstimmen. Verwenden Sie diese Option, wenn Sie sicher sind, dass die Ergebnisse nur mit den Dateien übereinstimmen, die Sie löschen möchten.

Im folgenden Beispiel sucht find rekursiv alle Dateien in der Hierarchie, beginnend mit dem aktuellen Verzeichnis, und löscht alle Dateien, die mit der Erweiterung .err enden:

find . -name "*.err" -delete

Haben Sie noch Fragen?

Werden Sie Mitglied unserer Community und stellen Sie Ihre Fragen, damit andere Linode- und Linux-Enthusiasten Ihnen helfen können.

Verwandte Fragen:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.