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 find
zu 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