Unabhängig davon, wie organisiert ich vorhabe, 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. Manchmal 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 erst erstellt habe. Was auch immer das Dilemma ist, ich weiß, dass ich auf einem POSIX-System immer den find
habe Befehl.
Weitere Linux-Ressourcen
- Spickzettel für Linux-Befehle
- Spickzettel für fortgeschrittene Linux-Befehle
- Kostenloser Online-Kurs:RHEL Technical Overview
- Spickzettel für Linux-Netzwerke
- SELinux-Spickzettel
- Spickzettel für allgemeine Linux-Befehle
- Was sind Linux-Container?
- Unsere neuesten Linux-Artikel
find installieren
Der find
Der Befehl wird von der POSIX-Spezifikation definiert, die den offenen Standard schafft, an 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 werden nicht alle find
Befehle sind genau gleich. Das GNU find
Der Befehl hat zum Beispiel Funktionen, die BSD oder Busybox oder Solaris find
Der Befehl hat möglicherweise keine oder hat eine andere Implementierung. Dieser Artikel verwendet GNU find
aus dem Paket findutils, weil es leicht verfügbar und ziemlich beliebt ist. Die meisten in diesem Artikel gezeigten 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.
Suchen Sie eine Datei anhand des Namens
Sie können eine Datei anhand ihres Dateinamens suchen, indem Sie mithilfe regulärer Ausdrücke den vollständigen Dateinamen oder Teile des Dateinamens angeben. Der find
Der Befehl erfordert den Pfad zu dem Verzeichnis, in dem Sie suchen möchten, Optionen, um anzugeben, welches Attribut Sie suchen (zum Beispiel -name
für einen Dateinamen mit Berücksichtigung der Groß-/Kleinschreibung) und dann die Suchzeichenfolge. Standardmäßig wird Ihre Suchzeichenfolge wörtlich behandelt:Der 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 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 mit -iname
die Groß-/Kleinschreibung ignorieren Möglichkeit:
$ find ~ -iname "foo"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
Platzhalter
Sie können einfache Shell-Platzhalterzeichen verwenden, um Ihre Suche zu erweitern. 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 (?
) stellt ein einzelnes Zeichen dar:
$ find ~ -iname "foo*.???"
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txtDies ist keine reguläre Ausdruckssyntax, daher wird der Punkt (
.
) stellt 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 case-sensitive als auch eine case-insensitive Option. Im Gegensatz zum-name
und-iname
Optionen jedoch eine-regex
und-iregex
Die Suche wird auf den gesamten Pfad angewendet , nicht nur der Dateiname. Das heißt, wenn Sie nachfoo
suchen , erhalten Sie keine Ergebnisse, weilfoo
stimmt nicht mit/home/tux/Documents/foo
überein . 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/FooEine Datei finden, die in der letzten Woche geändert wurde
Um eine Datei zu finden, die Sie letzte Woche zuletzt geändert haben, verwenden Sie
-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.txtEine Datei finden, die innerhalb eines Zeitraums von Tagen geändert wurde
Sie können
-mtime
kombinieren Optionen zum Auffinden einer Datei innerhalb eines Zeitraums von Tagen. Für die erste-mtime
Geben Sie im 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 größte Anzahl von Tagen an. Diese Suche sucht beispielsweise nach Dateien mit Änderungszeiten, die mehr als einen Tag in der Vergangenheit liegen, aber nicht mehr als sieben:$ find ~ -mtime +1 -mtime -7
Suche nach Dateityp einschränken
Es ist üblich, die Ergebnisse von
find
zu optimieren indem Sie den gesuchten Dateityp angeben. Sie sollten diese Option nicht verwenden, wenn Sie sich nicht sicher sind, wonach Sie suchen, aber wenn Sie wissen, dass Sie nach einer Datei suchen und nicht nach einem Verzeichnis, oder nach einem Verzeichnis, aber nicht nach einer Datei, dann kann dies großartig sein Filter zu verwenden. Die Option ist-type
, und seine Argumente sind ein Buchstabencode, der einige verschiedene Arten von Daten darstellt. Die häufigsten sind:
d
- Verzeichnisf
- Dateil
- Symbolischer Links
- Steckdosep
- Named Pipe (wird für FIFO verwendet)b
- block special (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
Der find
Der Befehl ist standardmäßig rekursiv, was bedeutet, dass er nach Ergebnissen in den Verzeichnissen von Verzeichnissen sucht, die in Verzeichnissen enthalten sind (und so weiter). Dies kann in einem großen Dateisystem überwältigend werden, aber Sie können -maxdepth
verwenden Option, um zu steuern, wie tief in Ihrer Ordnerstruktur Sie find
möchten absteigen:
$ find /usr -iname "*xml" | wc -l
15588
$ find /usr -maxdepth 2 -iname "*xml" | wc -l
15
Sie können die minimale Rekursionstiefe alternativ mit -mindepth
festlegen :
$ 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 Parallel-Befehl. Es gibt viele Gründe, find
zu lernen , also laden Sie unser kostenloses find
herunter Spickzettel um Ihnen zu helfen, mehr über den Befehl zu erfahren.