Unabhängig davon, wie organisiert ich sein möchte, scheint es immer Zeiten zu geben, in denen ich eine Datei einfach nicht finden kann. Manchmal liegt es daran, dass ich mich nicht an den Namen der Datei erinnern kann. Zu anderen Zeiten kenne ich den Namen, aber ich kann mich nicht erinnern, wo ich mich entschieden habe, ihn zu speichern. Es gibt sogar Zeiten, in denen ich eine Datei benötige, die ich gar nicht erstellt habe. Aber egal, in welcher Verlegenheit ich weiß, dass ich auf einem POSIX-System immer die find
Befehl.
Suche installieren
Die find
Der Befehl wird durch die POSIX-Spezifikation definiert, die den offenen Standard erstellt, nach dem POSIX-Systeme (einschließlich Linux, BSD und macOS) gemessen werden. Einfach gesagt, Sie haben bereits find
installiert, solange Sie Linux, BSD oder macOS ausführen.
Allerdings nicht alle find
Befehle sind genau gleich. Die GNU find
Befehl hat beispielsweise Funktionen, die BSD oder Busybox oder Solaris find
Befehl möglicherweise nicht hat oder hat, aber anders implementiert. Dieser Artikel verwendet GNU find
aus dem findutils-Paket, weil es leicht verfügbar und ziemlich beliebt ist. Die meisten in diesem Artikel demonstrierten Befehle funktionieren mit anderen Implementierungen von find
, aber sollten Sie einen Befehl auf einer anderen Plattform als Linux ausprobieren und unerwartete Ergebnisse erhalten, versuchen Sie, die GNU-Version herunterzuladen und zu installieren.
Datei anhand des Namens suchen
Sie können eine Datei anhand ihres Dateinamens suchen, indem Sie den vollständigen Dateinamen oder Teile des Dateinamens mit regulären Ausdrücken angeben. Die find
Der Befehl erfordert den Pfad zu dem Verzeichnis, in dem Sie suchen möchten, Optionen zum Angeben des gesuchten Attributs (zum Beispiel –name
für einen Dateinamen, bei dem die Groß-/Kleinschreibung beachtet wird) und dann die Suchzeichenfolge. Standardmäßig wird Ihre Suchzeichenfolge wörtlich behandelt: Die find
Der Befehl sucht nach einem Dateinamen, der genau der Zeichenfolge entspricht, die Sie zwischen Anführungszeichen eingeben, es sei denn, Sie verwenden die Syntax für reguläre Ausdrücke.
Angenommen, Ihr Documents-Verzeichnis enthält vier Dateien: Foo
, foo
, foobar.txt
, und foo.xml
. Hier ist eine wörtliche Suche nach einer Datei mit dem Namen “foo”:
$ find ~ -name "foo"
/home/tux/Documents/examples/foo
Sie können Ihre Suche erweitern, indem Sie die Groß-/Kleinschreibung mit dem -iname
Möglichkeit:
$ find ~ -iname "foo"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
Platzhalter
Sie können grundlegende Shell-Platzhalterzeichen verwenden, um Ihre Suche zu erweitern. Zum Beispiel das Sternchen (*
) steht für eine beliebige Anzahl von Zeichen:
$ find ~ -iname "foo*"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt
Ein Fragezeichen (?
) steht für ein einzelnes Zeichen:
$ find ~ -iname "foo*.???"
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt
Dies ist keine Syntax für reguläre Ausdrücke, daher ist der Punkt (.
) steht in diesem Beispiel für einen wörtlichen Punkt.
Reguläre Ausdrücke
Sie können auch reguläre Ausdrücke verwenden. Wie bei -iname
und -name
, gibt es sowohl eine Option, bei der die Groß-/Kleinschreibung beachtet wird, als auch eine Option, bei der die Groß-/Kleinschreibung nicht beachtet wird. nicht so wie -name
und -iname
Optionen, aber a -regex
und -iregex
Suche wird auf die angewendet ganzer Weg, nicht nur der Dateiname. Das heißt, wenn Sie suchen nach foo
, Sie erhalten keine Ergebnisse, weil foo
passt nicht zusammen /home/tux/Documents/foo
. Stattdessen müssen Sie entweder nach dem gesamten Pfad suchen oder eine Wildcard-Sequenz am Anfang Ihrer Zeichenfolge verwenden:
$ find ~ -iregex ".*foo"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
Finden Sie eine Datei, die in der letzten Woche geändert wurde
Um eine Datei zu finden, die Sie letzte Woche zuletzt geändert haben, verwenden Sie die -mtime
Option zusammen mit einer (negativen) Anzahl von Tagen in der Vergangenheit:
$ find ~ -mtime -7
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt
Finden Sie eine Datei, die innerhalb eines Zeitraums von Tagen geändert wurde
Sie können kombinieren -mtime
Optionen, um eine Datei innerhalb eines Bereichs von Tagen zu finden. Für das erste -mtime
Geben Sie für das Argument die letzte Anzahl von Tagen an, an denen Sie die Datei hätten ändern können, und geben Sie für das zweite die höchste Anzahl von Tagen an. Diese Suche sucht beispielsweise nach Dateien mit Änderungszeiten von mehr als einem Tag in der Vergangenheit, aber nicht mehr als sieben:
$ find ~ -mtime +1 -mtime -7
Suche nach Dateityp einschränken
Es ist üblich, die Ergebnisse von find
indem Sie den gesuchten Dateityp angeben. Sie sollten diese Option nicht verwenden, wenn Sie nicht sicher sind, wonach Sie suchen, aber wenn Sie wissen, dass Sie nach einer Datei und nicht nach einem Verzeichnis oder nach einem Verzeichnis, aber nicht nach einer Datei suchen, kann dies eine großartige Option sein Filter zu verwenden. Die Option ist -type
, und seine Argumente sind ein Buchstabencode, der einige verschiedene Arten von Daten repräsentiert. Die häufigsten sind:
d
– Verzeichnisf
– Dateil
– symbolischer Links
– Steckdosep
– Named Pipe (verwendet für FIFO)b
– Block Spezial (normalerweise eine Festplattenbezeichnung)
Hier sind einige Beispiele:
$ find ~ -type d -name "Doc*"
/home/tux/Documents
$ find ~ -type f -name "Doc*"
/home/tux/Downloads/10th-Doctor.gif
$ find /dev -type b -name "sda*"
/dev/sda
/dev/sda1
Umfang anpassen
Die find
Der Befehl ist standardmäßig rekursiv, dh er sucht nach Ergebnissen in den Verzeichnissen von Verzeichnissen, die in Verzeichnissen (usw.) enthalten sind. Dies kann in einem großen Dateisystem überwältigend sein, aber Sie können die -maxdepth
Option, um zu steuern, wie tief in Ihre Ordnerstruktur Sie möchten find
absteigen:
$ find /usr -iname "*xml" | wc -l
15588
$ find /usr -maxdepth 2 -iname "*xml" | wc -l
15
Die minimale Rekursionstiefe können Sie alternativ mit einstellen -mindepth
:
$ find /usr -mindepth 8 -iname "*xml" | wc -l
9255
Spickzettel herunterladen
Dieser Artikel behandelt nur die Grundfunktionen von find
. Es ist ein großartiges Werkzeug zum Durchsuchen Ihres Systems, aber es ist auch ein wirklich nützliches Frontend für den leistungsstarken Parallel-Befehl. Es gibt viele Gründe zu lernen find
, so Laden Sie unsere kostenlose herunter find
Spickzettel um Ihnen zu helfen, mehr über den Befehl zu erfahren.