Suchen Sie Dateien und Verzeichnisse unter Linux mit dem Befehl find | Opensource.com

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 überhaupt nicht an den Namen der Datei erinnern kann. Zu anderen Zeiten kenne ich den Namen, kann mich aber nicht erinnern, wo ich beschlossen habe, ihn zu speichern. Es gibt sogar Zeiten, in denen ich eine Datei brauche, die ich gar nicht erst erstellt habe. Egal, was das Dilemma ist, ich weiß, dass ich auf einem POSIX-System immer den Befehl find habe.

Installieren von find

Der Befehl find wird durch die POSIX-Spezifikation definiert, die den offenen Standard erstellt, nach dem POSIX-Systeme (einschließlich Linux, BSD und macOS) gemessen werden. Einfach ausgedrückt, Sie haben bereits find installiert, solange Sie Linux, BSD oder macOS ausführen.

Allerdings sind nicht alle find-Befehle genau gleich. Der GNU find -Befehl zum Beispiel verfügt über Funktionen, die der 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, da es leicht verfügbar und ziemlich beliebt ist. Die meisten Befehle, die in diesem Artikel gezeigt werden, funktionieren mit anderen Implementierungen von find, aber sollten Sie einen Befehl auf einer anderen Plattform als Linux versuchen und unerwartete Ergebnisse erhalten, versuchen Sie, die GNU-Version herunterzuladen und zu installieren.

Datei nach Namen suchen

Sie können eine Datei nach ihrem Dateinamen suchen, indem Sie den vollständigen Dateinamen oder Teile des Dateinamens mit regulären Ausdrücken angeben. Der Befehl find erfordert den Pfad zu dem Verzeichnis, in dem Sie suchen möchten, Optionen zum Angeben des gesuchten Attributs (z. B. –name für einen Dateinamen, bei dem die Groß- und Kleinschreibung beachtet wird) und dann die Suchzeichenfolge. Standardmäßig wird Ihre Suchzeichenfolge wörtlich behandelt: Der Befehl find sucht nach einem Dateinamen, der genau der Zeichenfolge entspricht, die Sie zwischen Anführungszeichen eingeben, es sei denn, Sie verwenden die Syntax regulärer Ausdrücke.

Angenommen, Ihr Dokumentenverzeichnis 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 der Option -iname nicht berücksichtigen:

$ 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 repräsentiert das Sternchen (*) 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 stellt der Punkt (.) in diesem Beispiel einen wörtlichen Punkt dar.

Reguläre Ausdrücke

Sie können auch reguläre Ausdrücke verwenden. Wie bei -iname und -name gibt es sowohl eine Groß- / Kleinschreibung als auch eine Groß- / Kleinschreibung. Im Gegensatz zu den Optionen -name und -iname wird jedoch eine Suche nach -regex und -iregex auf den gesamten Pfad angewendet, nicht nur auf den Dateinamen. Das heißt, wenn Sie nach foo suchen, erhalten Sie keine Ergebnisse, da foo nicht mit /home/tux/Documents/foo übereinstimmt. Stattdessen müssen Sie entweder nach dem gesamten Pfad suchen oder eine Platzhaltersequenz am Anfang Ihrer Zeichenfolge verwenden:

$ find ~ -iregex ".*foo"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo

Eine Datei finden, die in der letzten Woche geändert wurde

Um eine Datei zu finden, die Sie letzte Woche geändert haben, verwenden Sie die Option -mtime 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

Suchen einer Datei, die innerhalb eines Tagesbereichs geändert wurde

Sie können die Optionen -mtime kombinieren, um eine Datei innerhalb eines Tagesbereichs zu suchen. Geben Sie für das erste Argument -mtime die letzte Anzahl von Tagen an, an denen Sie die Datei geändert haben könnten, und für das zweite Argument die größte Anzahl von Tagen. Zum Beispiel sucht diese Suche nach Dateien mit Änderungszeiten mehr als einen Tag in der Vergangenheit, aber nicht mehr als sieben:

$ find ~ -mtime +1 -mtime -7

Beschränken Sie eine Suche nach Dateityp

Es ist üblich, die Ergebnisse von findzu optimieren, 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 einem Verzeichnis, aber nicht nach einer Datei suchen, kann dies ein großartiger Filter sein. Die Option ist -type , und ihre Argumente sind ein Buchstabencode, der einige verschiedene Arten von Daten darstellt. Die häufigsten sind:

  • d – verzeichnis
  • f – datei
  • l – symbolischer Link
  • s – sockel
  • p – named Pipe (wird für FIFO verwendet)
  • b – block Sonder (in der Regel eine Festplatte))

Hier 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

Bereich anpassen

Der Befehl find ist standardmäßig rekursiv, dh er sucht nach Ergebnissen in den Verzeichnissen von Verzeichnissen, die in Verzeichnissen enthalten sind (usw.). Dies kann in einem großen Dateisystem überwältigend werden, aber Sie können die Option -maxdepth verwenden, um zu steuern, wie tief find in Ihre Ordnerstruktur absteigen soll:

$ find /usr -iname "*xml" | wc -l
15588
$ find /usr -maxdepth 2 -iname "*xml" | wc -l
15

Sie können die minimale Rekursionstiefe alternativ mit festlegen -mindepth:

$ find /usr -mindepth 8 -iname "*xml" | wc -l
9255

Laden Sie den Spickzettel herunter

Dieser Artikel behandelt nur die Grundfunktionen von find. Es ist ein großartiges Tool zum Durchsuchen Ihres Systems, aber es ist auch ein wirklich nützliches Front-End für den leistungsstarken Parallelbefehl. Es gibt viele Gründe, find zu lernen, also lade unseren kostenlosen find Cheat Sheet herunter, um mehr über den Befehl zu erfahren.

Leave a Reply