Warum der Punkt in Suchbefehlen?

14

Typischerweise sieht man findBefehle, die so aussehen:

$ find . -name foo.txt

wenn die Suche ab dem aktuellen Verzeichnis beginnen soll. Ich stelle fest, dass ich auf meinen Computern (Ubuntu, Cygwin) die gleichen Ergebnisse ohne den Punkt erhalte.

Warum ist es in der Regel enthalten? Ist es nur eine Konvention, explizit zu sein, oder war / ist es auf bestimmten Systemen erforderlich?

Eric Wilson
quelle

Antworten:

26

Bei einigen Versionen * von muss findein Pfadargument angegeben werden, das ein Verzeichnis ist, von dem aus die Suche gestartet werden kann. Punkt steht .einfach für das aktuelle Verzeichnis, in dem Sie normalerweise suchen möchten.

Sie können diesen Pfad durch einen beliebigen Pfad ersetzen, auf dem die Suche basieren soll. In einigen Versionen von find kann dies beibehalten werden, da das aktuelle Verzeichnis impliziert wird, wenn kein Pfadargument vorhanden ist.

Sie können man findin Ihrer Shell nach Details zu den Argumenten suchen. Zum Beispiel zeigt die Verwendungsübersicht für meins, dass das Pfadargument optional ist (in eckiger Klammer []):

   find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]

Wenn Sie my findohne Argumente ausführen, werden alle Dateien und Verzeichnisse ab dem aktuellen Ordner zurückgegeben. In Ihrem Beispiel wird einfach ausdrücklich angegeben, dass die Suche beginnen soll, .und der Ausdruck wird -name foo.txtals einer der Suchfilter eingeschlossen.

* Insbesondere alle BSD-Varianten und alles, was sich strikt an den POSIX-Standard hält . GNU find erlaubt es optional zu sein.

Caleb
quelle
1
Wissen Sie aus erster Hand, welche Versionen von find dies erfordern? Oder wo könnte ich nachforschen? (find ist schwer zu googeln)
Eric Wilson
Interessantes über den Standardsuchpfad.
Rozcietrzewiacz
2
Ich glaube, die meisten BSD- Suchvarianten erfordern ein Pfadargument, während es in GNU optional ist. Abweichungen sind möglich.
Caleb
2
Beachten Sie, dass in mindestens den POSIX-Standardspezifikationen von 2008 pathein erforderliches Argument zu finden ist .
Caleb
1
Nit pick: "Sie könnten diesen [den Punkt] durch einen beliebigen Pfad ersetzen" → "beliebige Pfade , die Sie möchten", da Sie sagen können find dir1 dir2 dir3 -name foo.txt.
G-Man sagt, dass Monica
5

Die AIX-Version von find erfordert beispielsweise den Pfad und wird nicht ausgeführt, wenn keiner angegeben ist.

# oslevel -s
5300-08-03-0831
# find -name bob
Usage: find [-H | -L] Path-list [Expression-list]

# oslevel -s
6100-03-01-0921
# find -name bob
Usage: find [-H | -L] Path-list [Expression-list]

Obwohl auf einigen AIX-Rechnern möglicherweise ein GNU-Find installiert ist, der ohne den Pfad auskommt,

# oslevel -s
6100-03-01-0921
# /opt/freeware/bin/find -version
GNU find version 4.1
EightBitTony
quelle