GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Finden Sie Dateien und Verzeichnisse unter Linux mit dem Befehl find

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.txt

Dies 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 nach foo suchen , erhalten Sie keine Ergebnisse, weil foo 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/Foo

Eine 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.txt

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


Linux
  1. Kopieren und Einfügen in der Linux-Befehlszeile mit xclip

  2. Finden Sie Dateien und Verzeichnisse in Linux wie ein Profi

  3. So löschen Sie Dateien und Verzeichnisse in Linux über die Befehlszeile

  4. Finden Sie die größten Dateien und Verzeichnisse in Linux

  5. Verwenden des Linux-Suchbefehls – Verwendung mit Beispielen

Linux-Suchbefehl mit praktischen Beispielen

So finden Sie Dateien mit dem fd-Befehl in Linux

Finden Sie Dateien und Verzeichnisse unter Linux ganz einfach

Tutorial für Linux-Suchbefehle (mit Beispielen)

So finden Sie Dateien mit Dutzenden von Kriterien mit dem Bash-Suchbefehl

Grundlagen der Linux-Befehlszeile – Arbeiten mit Dateien und Verzeichnissen