logo

Finden Sie Command unter Linux/Unix mit Beispielen

Der Befehl „find“ hilft uns, eine bestimmte Datei in einem Verzeichnis zu finden. Es wird verwendet, um die Liste der Dateien für die verschiedenen Bedingungen wie Berechtigung, Benutzereigentum, Änderung, Datum/Uhrzeit, Größe und mehr zu finden.

In Unix-ähnlichen und anderen Betriebssystemen ist der Befehl „find“ ein Befehlszeilendienstprogramm, das Dateien auf der Grundlage einiger vom Benutzer angegebener Formate findet und entweder den Pfadnamen aller übereinstimmenden Objekte ausgibt oder, wenn andere Aktionen angefordert werden, diese Aktion implementiert alle übereinstimmenden Objekte.

Es startet eine Suche an einem gewünschten Startort und durchläuft anschließend rekursiv die Verzeichnisse (Knoten) einer hierarchischen Struktur (im Allgemeinen ein Baum). Der Befehl „find“ kann verschiedene Dateipartitionssysteme suchen und durchsuchen, die zu einem einzelnen oder mehreren Speichergeräten im Startverzeichnis gehören.

Das Suchformat enthält ein Muster für den Abgleich mit dem Dateinamen oder den Zeitbereich für den Abgleich mit der Änderungszeit oder der Dateizugriffszeit. Der Befehl „find“ stellt standardmäßig eine Liste aller Dateien im aktuellen Arbeitsverzeichnis bereit. Benutzer können die Suche jedoch auf eine gewünschte maximale Ebene im Startverzeichnis beschränken.

Die zugehörigen Suchprogramme verwenden eine indizierte Dateidatenbank, die über den Befehl „fine“ abgerufen wurde, um eine schnellere Technik zum Durchsuchen des gesamten Dateisystems nach Namen bereitzustellen.

Das Suchdienstprogramm ist standardmäßig in den meisten enthalten Linux-Distributionen , sodass wir kein zusätzliches Paket installieren müssen. Es ist einer der wichtigsten und am häufigsten verwendeten Befehle der Linux System.

 find 

Die beiden Optionen bestimmen, wie find symbolische Links berücksichtigen soll. Die Standardeinstellung besteht darin, niemals symbolische Links zu verfolgen. Die Flagge, d.h. -L , wird dazu führen, dass symbolische Links verfolgt werden. Die Flagge, d.h. -H , verfolgt lediglich symbolische Links, während mit den Befehlszeilenargumenten fortgefahren wird. Die Flags werden im POSIX-Standard für den Find-Befehl erwähnt. Eine grundlegende Erweiterung ist ein Flag, d. h. -P , um den folgenden Symlink explizit zu deaktivieren.

Zumindest ein Pfad muss den Ausdruck vorwegnehmen. Der Befehl find kann Platzhalter intern interpretieren und Befehle müssen sorgfältig in Anführungszeichen gesetzt werden, um Shell-Globbing zu verwalten.

Ausdruckskomponenten werden durch die Befehlszeilenargumentgrenze isoliert, die in der Shell-Syntax im Allgemeinen als Leerzeichen angezeigt wird. Sie werden von links nach rechts betrachtet. Sie können logische Komponenten wie OR und AND sowie Prädikate (Aktionen und Filter) enthalten. GNU find enthält mehrere andere Funktionen, die von POSIX nicht erwähnt werden.

Zur Angabe des Verzeichnisses werden folgende Symbole verwendet:

(.) : Für den aktuellen Verzeichnisnamen

(/) : Für das Stammverzeichnis

Kurze Geschichte des Find-Befehls

Der Befehl find kam in Version 5 Unix als Element von vor Programmierer-Workbench Projekt und wurde von spezifiziert Dick Haight mit cpio, die für den gemeinsamen Einsatz entwickelt wurden.

Ursprünglich wurde die GNU-Implementierung des Befehls find durch spezifiziert Eric Decker . Später wurde es von entwickelt David MacKenzie, Tim Wood , Und Jay Plett . Außerdem wurde der Befehl „find“ auf das Betriebssystem IBM i portiert.

Singleton-Design

Prädikate

Weit verbreitete Primärfarben sind:

    -Namensmuster:Es prüft, ob der Dateiname mit dem angegebenen Shell-Glob-Muster übereinstimmt oder nicht.-Typ-Typ:Es prüft, ob es sich bei der Datei um einen bereitgestellten Typ handelt.-drucken:Es gibt immer den wahren Wert. Es gibt den aktuellen Dateinamen und eine neue Zeile in stdout aus.-print0:Es gibt immer den wahren Wert. Es gibt den aktuellen Dateinamen und ein Nullzeichen auf stdout aus. Wird von POSIX nicht benötigt.-exec Programm [Argument ...];:Es gibt immer den wahren Wert. Es führt ein Programm mit den fest vorgegebenen Argumenten und dem aktuellen Dateipfad aus.-exec Programm [Argument ...] { } +:Es gibt immer den wahren Wert. Es führt ein Programm mit den fest vorgegebenen Argumenten und möglichst mehreren Pfaden aus. Bei fast jeder Implementierung bedeuten andere {}-Vorkommen zusätzliche Kopien des angegebenen Namens (Aspekt, der von POSIX nicht benötigt wird).-ok Programm [Argument ...];:Es ist dasselbe wie -exec, gibt jedoch false oder true zurück, wenn das Programm 0 zurückgibt.

Find implementiert standardmäßig -print, falls die Bedingungen wahr sind und der Ausdruck keines von -ok, -exec, -print oder -print0 verwendet.

Betreiber

Operatoren erweitern die Suchbefehlsausdrücke. Sie werden in absteigender Reihenfolge aufgeführt:

    (Ausdruck):Dieser Operator kann den Vorrang erzwingen.! Ausdruck:Wenn expr false zurückgibt, gibt es true zurück.
  • expr1 expr2 (oder expr1 -a expr2 : AND. expr2 wird nicht ausgewertet, wenn expr1 falsch ist.
  • Ausdruck1 -o Ausdruck2: ODER. Ausdruck2 wird nicht ausgewertet, wenn Ausdruck1 wahr ist.

Beispiele für den find-Befehl

Sehen wir uns die folgenden Beispiele des Suchbefehls an:

Suchen Sie Dateien nach Namen

Wir können alle Dateien durchsuchen, die mit der Erweiterung „.txt“ enden. Führen Sie dazu den folgenden Befehl aus:

 find . -name '*.txt' 

Der obige Befehl listet alle Textdateien aus dem aktuellen Arbeitsverzeichnis auf. Betrachten Sie die folgende Ausgabe:

Linux-Suche

Aus der obigen Ausgabe werden alle Dateien mit der Erweiterung „.txt“ mit dem Befehl „find“ aufgelistet.

Dateien nach Typ suchen

Der Parameter „-type“ wird verwendet, um den Dateityp anzugeben.

Einige der Dateitypen sind wie folgt:

  • f: reguläre Datei
  • d: Verzeichnis
  • l: symbolische Links
  • c: Zeichengeräte
  • b: Geräte blockieren

Betrachten Sie den folgenden Befehl:

 find . -type d -name '*.bak' 

Der obige Befehl listet alle Verzeichnisse mit der Erweiterung „.bak“ auf. Betrachten Sie die folgende Ausgabe:

foreach-Schleifen-Typoskript
Linux-Suche

Aus der obigen Ausgabe wird der Befehl „find . -type d -name '*.bak' zeigt alle Verzeichnisse an, die mit '.bak' enden.

Finden Sie neuere Dateien

Der Parameter „-newer“ hilft bei der Suche nach Dateien, die neuer als die genannte Datei sind. Betrachten Sie den folgenden Befehl:

 find . -newer msg.txt 

Der obige Befehl zeigt alle Dateien aus dem aktuellen Arbeitsverzeichnis an, die neuer als „msg.txt“ sind. Betrachten Sie die folgende Ausgabe:

Linux-Suche

Aus der obigen Ausgabe geht hervor, dass alle angezeigten Dateien neuer sind als die Datei „msg.txt“.

Suchen und löschen Sie eine Datei

Die Option „-delete“ wird verwendet, um eine bestimmte Datei zu löschen. Wir müssen bei der Verwendung dieses Befehls sehr vorsichtig sein, da es keine Option zum Rückgängigmachen gibt, wenn er einmal ausgeführt wurde. Betrachten Sie den folgenden Befehl:

 find . -name Demo.txt -delete 

Der obige Befehl löscht die Datei „Demo.txt“ aus dem aktuellen Arbeitsverzeichnis. Betrachten Sie die folgende Ausgabe:

Linux-Suche

Suchen Sie ein Verzeichnis

Die Option „type -d“ wird verwendet, um ein Verzeichnis zu finden. Betrachten Sie den folgenden Befehl:

 find . type -depth -name Newdirectory 

Der obige Befehl findet den Speicherort „Neues Verzeichnis“. Betrachten Sie die folgende Ausgabe:

Linux-Suche

Suchen Sie Dateien nach Änderungszeit

Die Option „-mtime“, gefolgt von der Anzahl der Tage, wird verwendet, um die Dateien durch Änderung zu finden. Die Anzahl der Tage kann positiv oder negativ sein. Der negative Wert wird für weniger als den letzten Tag verwendet, ähnlich wie -1 für den letzten Tag, und in ähnlicher Weise findet +1 die Datei für den Tag, der mehr als einen Tag zurückliegt. Betrachten Sie den folgenden Befehl:

 find ./Newdirectory -mtime -1 

Der obige Befehl findet die Dateien, die am letzten Tag geändert wurden. Betrachten Sie die folgende Ausgabe:

Linux-Suche

Dateien nach Berechtigung suchen

Die Option „-perm“ wird verwendet, um Dateien nach Berechtigung zu finden. Führen Sie den Suchbefehl mit der Option „-perm“ aus und übergeben Sie den erforderlichen Wert. Betrachten Sie den folgenden Befehl:

 find ./ -perm 777 

Der obige Befehl listet die Dateien aus dem angegebenen Verzeichnis auf, die jeder lesen, schreiben und ausführen kann.

Suchen und ersetzen Sie Dateien

Um Dateien zu finden und zu ersetzen, müssen wir den Befehl „find“ mit dem Befehl „sed“ kombinieren. Um Dateien zu bearbeiten, verwenden Sie die Option „-exec“ mit dem Befehl „find“. Betrachten Sie den folgenden Befehl:

Logik 1. Ordnung
 find ./Newdirectory -type f -exec sed -i 's/find/replace/g' {} ; 

Mit dem obigen Befehl wird das angegebene Vorkommen ersetzt. Betrachten Sie die folgende Ausgabe:

Linux-Suche

Suchen Sie nach Text in mehreren Dateien

Wir können den Befehl „find“ mit dem Befehl „grep“ noch einmal kombinieren, um den Text aus den verschiedenen Dateien zu finden. Betrachten Sie den folgenden Befehl:

 find ./Newdirectory -type f -name '*.txt' -exec grep 'demo' {} ; 

Der obige Befehl findet die Zeilen mit dem Text „demo“ aus allen Textdateien im Verzeichnis „Neues Verzeichnis“. Betrachten Sie die folgende Ausgabe:

Linux-Suche

Aus der obigen Ausgabe können wir sehen, dass die Zeilen mit dem Text „demo“ angezeigt wurden.

Durchsuchen Sie jedes Verzeichnis

 $ find / -name file1 -type f -print 

Der obige Befehl findet alle Verzeichnisse für eine reguläre Datei mit dem Titel Datei1 und gibt sie auf dem Bildschirm aus. Im Allgemeinen ist es keine gute Idee, auf diese Weise nach Dateien zu suchen. Es kann eine ganze Weile dauern. Daher ist es am besten, das Verzeichnis zu erwähnen. Einige Betriebssysteme mounten möglicherweise Dateisysteme (dynamisch), die für den Befehl „find“ nicht geeignet sind. Kompliziertere Dateinamen, die für die Shell eindeutige Zeichen enthalten, müssen möglicherweise in einfache Anführungszeichen gesetzt werden.