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 demfind
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 find
Befehl aus, der alle .png
Dateien im Verzeichnis /
sucht:
find -name *.png
Sie sollten eine ähnliche Ausgabe sehen:
./image01.png
Ändern Sie den Bilddateityp und suchen Sie nach allen .jpg
Dateien 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 Befehlfind
konnten Sie mit dem Befehlxargs
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: