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
-inameund-name, gibt es sowohl eine case-sensitive als auch eine case-insensitive Option. Im Gegensatz zum-nameund-inameOptionen jedoch eine-regexund-iregexDie Suche wird auf den gesamten Pfad angewendet , nicht nur der Dateiname. Das heißt, wenn Sie nachfoosuchen , erhalten Sie keine Ergebnisse, weilfoostimmt 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
-mtimeOption 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
-mtimekombinieren Optionen zum Auffinden einer Datei innerhalb eines Zeitraums von Tagen. Für die erste-mtimeGeben 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 -7Suche nach Dateityp einschränken
Es ist üblich, die Ergebnisse von
findzu 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.