find
ist ein Befehl zum rekursiven Filtern von Objekten im Dateisystem basierend auf einem einfachen Bedingungsmechanismus. Verwenden Sie find
, um nach einer Datei oder einem Verzeichnis in Ihrem Dateisystem zu suchen. Mit dem Flag -exec
können Dateien innerhalb desselben Befehls gefunden und sofort verarbeitet werden.,
Find Linux Files by Name or Extension
Use find
from the command line to locate a specific file by name or extension., Das folgende Beispiel sucht nach *.err
Dateien im /home/username/
Verzeichnis 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"
Common Linux Find Commands and Syntax
Die find
Der Befehl hat normalerweise die folgende Form:
find options starting/path expression
- Das Attribut
options
steuert das Verhalten und die Optimierungsmethode des Prozessesfind
., - Das Attribut
starting/path
definiert das Verzeichnis der obersten Ebene, in demfind
mit dem Filtern beginnt. - Das Attribut
expression
steuert die Tests, die die Verzeichnishierarchie durchsuchen, um eine Ausgabe zu erzeugen.
Suchen Sie eine Datei in Linux Mit dem Dateinamen
Um eine Datei mit dem Dateinamen zu finden, verwenden Sie die Syntax find -name filename
. Wenn Sie den Pfad weglassen, wird über die gesamte Festplatte nach der Datei gesucht., Sie können beispielsweise eine Datei mit dem Namen example.err
in Ihrem Verzeichnis /home/username
mit dem folgenden Befehl finden:
find -name example.err
Sie sollten eine ähnliche Ausgabe sehen:
./username/example.err
Suchen Sie eine Datei in Ihrem aktuellen Verzeichnis Mit dem Befehl Find
Nehmen Sie ein Blick auf die Beispielverzeichnisstruktur und Dateien. Sie werden in den Beispielen dieses Leitfadens erwähnt.,möchten Sie die Datei example.err
innerhalb des Verzeichnisses oder eines seiner Unterverzeichnisse finden, können Sie den folgenden Befehl ausgeben:
find . -name example.err
Ihre Ausgabe ähnelt der folgenden:
./example.err./directory_1/example.err
Die Ausgabe spiegelt directory_1
Verzeichnisstruktur wider:
Suchen Sie Bilddateien in Linux Über die Befehlszeile
Verweisen auf die Dateistruktur Im vorherigen Abschnitt befindet sich ein Bild mit dem Namen image01.png
, das sich im Stammverzeichnis befindet (/
)s der Verzeichnisstruktur.,
Um die Datei image01.png
zu finden, führen Sie den folgenden Befehl find
aus, der alle .png
Dateien findet, die im Verzeichnis /
gespeichert sind.
find -name *.png
Sie sollten eine ähnliche Ausgabe sehen:
./image01.png
Ändern Sie den Bilddateityp und suchen Sie nach .jpg
Dateien im Stammverzeichnis (/
):
find -name *.jpg
Die Ausgabe ähnelt dem Beispiel., In der Beispielverzeichnisstruktur im vorherigen Abschnitt können Sie den Speicherort der Datei anzeigen.
./web_files/unnamed.jpg
Suchen 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 aus:
find . -type f -empty
Wenn keine Ausgabe zurückgegeben wird, befindet sich keine leere Datei in Ihrem aktuellen Verzeichnis.
Optionen und Optimierungen zum Auffinden von Dateien in Linux über die Befehlszeile
Die Standardkonfiguration für find
ignoressymbolic Links., Wenn Sie möchten, dass find
symbolischen Links folgt und diese 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 erlaubt find
symbolische Links (-L
). find
durchsucht den gesamten Verzeichnisbaum unter /var/www/
nach Dateien, die mit .html
enden.,
find
optimiert die Filterung Strategie, um die Leistung zu erhöhen. Drei vom Benutzer auswählbare Optimierungsstufen werden als -O1
, -O2
und -O3
angegeben. Die-O1
– Optimierung ist die Standardeinstellung und zwingtfind
, basierend auf dem Dateinamen zu filtern, bevor alle anderen Tests ausgeführt werden.,
Die Optimierung auf der Ebene -O2
priorisiert Filename-Filter wie in -O1
und führt dann alle Filterung vom Dateityp aus, bevor Sie mit anderen ressourcenintensiveren Bedingungen fortfahren. Level -O3
Durch die Optimierung kann find
die strengste Optimierung durchführen und alle Tests basierend auf ihrem relativen Aufwand und der Wahrscheinlichkeit ihres Erfolgs neu anordnen.,
Command | Description |
---|---|
-O1 |
Filter based on filename first (default). |
-O2 |
File name first, then file-type., |
-O3 |
Allow find automatisch neu, um die Suche basierend auf die effiziente Nutzung von Ressourcen und Wahrscheinlichkeit. erfolg |
-maxdepth X |
Suche aktuelle verzeichnis sowie alle unterverzeichnisse X ebenen tiefe. |
-iname |
– Suche ohne Bezug zum text case., |
-not |
Return only results that do not match the test case. |
-type f |
Search for files. |
-type d |
Search for directories., |
Suchen Sie Dateien in Linux nach Änderungszeit Über die Befehlszeile
Der Befehl find
kann eine Verzeichnishierarchie basierend auf dem Zeitpunkt filtern, zu dem eine Datei zuletzt geändert wurde., Der folgende Befehl findet beispielsweise eine Datei mit der Erweiterung .err
, die in den letzten 7 Tagen geändert wurde:
find / -name "*err" -mtime -7
Der Beispielbefehl gibt die folgende Ausgabe zurück:
Verwenden Sie Grep, um Dateien in Linux mithilfe der Befehlszeile
zu finden Der Befehl find
kann die Verzeichnishierarchie nur basierend auf der name und Metadaten. 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 ist (-type f
) und führt dann den Befehl grep "test"
für jede Datei aus, die die Bedingungen erfüllt. Die übereinstimmenden Dateien werden auf dem Bildschirm gedruckt (-print
). Die geschweiften Klammern ({}
) sind ein Platzhalter für die Ergebnisse der Suche nach Übereinstimmungen., Die {}
sind in einfache Anführungszeichen gesetzt ('
), um zu vermeiden, dass grep
ein fehlerhafter Dateiname übergeben wird. Der Befehl -exec
wird mit einem Semikolon () beendet, das maskiert werden sollte (\;
), um eine Interpretation durch die Shell zu vermeiden.
Die im Beispiel verwendete Datei (example.err
) enthält Text mit der Aufschrift „test“., Wenn Sie den Beispielbefehl ausführen, wird eine ähnliche Ausgabe angezeigt:
Grep identifizierte jede Datei im aktuellen Arbeitsverzeichnis, die die Zeichenfolge „test“enthält.,
Hinweis
Vor der
find
– Implementierung der-exec
– Option können Sie mit dem Befehlxargs
eine ähnliche Ausgabe wie im obigen Beispiel generierenxargs
Befehl:find . -type f -print | xargs grep "test"
Dateien mit dem Befehl Find unter Linux verarbeiten und suchen
Die Option -exec
führt Befehle für jedes Objekt aus, das mit dem Ausdruck find
übereinstimmt., 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 des Befehls find
zu ändern.
Der Befehl example führt die Option -exec
im Stammverzeichnis des Prozesses find
aus. Verwenden Sie -execdir
, um den angegebenen Befehl in dem Verzeichnis auszuführen, in dem sich die Übereinstimmung befindet., Dies kann Sicherheitsbedenken lindern und zu einer besseren Leistung für einige Vorgänge führen.
Die Optionen -exec
oder -execdir
werden ohne weitere Eingabeaufforderungen ausgeführt. Wenn Sie vor der Aktion aufgefordert werden möchten, ersetzen Sie -exec
durch -ok
oder -execdir
durch -okdir
.
So finden und löschen Sie Dateien über die Linux-Befehlszeile
Vorsicht
Verwenden Sie diese Option mit äußerster Vorsicht.,
Fügen Sie am Ende eines Übereinstimmungsausdrucks die Option -delete
hinzu, um alle übereinstimmenden Dateien zu löschen. 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 findet find
rekursiv alle Dateien in der Hierarchie ab dem aktuellen Verzeichnis und löscht alle Dateien, die mit der Endung .err
extension:
find . -name "*.err" -delete
Hast du noch ein paar Fragen?,
Treten Sie unserer Community bei und stellen Sie Ihre Fragen an andere Linode-und Linux-Enthusiasten, um Ihnen zu helfen.
Verwandte Fragen: