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
- Gebräuchliche Linux-Suchbefehle und Syntax
- Dateien in Linux über den Dateinamen suchen
- Suchen Sie eine Datei in Ihrem aktuellen Verzeichnis mit dem Find-Befehl
- Find Image Files in Linux Using the Command Line
- Finden Sie eine leere Datei in Ihrem Verzeichnis mithilfe der Befehlszeile
- Optionen und Optimierungen für die Dateisuche in Linux über die Befehlszeile
- Finden Sie Dateien in Linux nach Änderungszeitpunkt mit der Befehlszeile
- Verwenden Sie Grep, um Dateien in Linux mithilfe der Befehlszeile zu finden
- Verarbeiten und Suchen von Dateien mit dem Befehl Find in Linux
- Wie Sie Dateien mit der Linux-Befehlszeile suchen und löschen
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 desfind-Prozesses. - Das
starting/path-Attribut definiert das oberste Verzeichnis, in demfindmit 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
-execdurch den Befehlfindkonnten Sie mit dem Befehlxargseine ä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: