Advertisements

Finden Sie Dateien und Verzeichnisse unter Linux mit dem Befehl find

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.

Weitere Linux-Ressourcen

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 – Verzeichnis
  • f – Datei
  • l – symbolischer Link
  • s – Steckdose
  • p – 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.

Finden Sie Dateien und Verzeichnisse unter Linux mit dem Befehl find

Leave a Reply

Your email address will not be published. Required fields are marked *

Scroll to top