なぜfindコマンドのドットですか?


14

通常、次のfindようなコマンドが表示されます。

$ find . -name foo.txt

現在のディレクトリから検索を開始する場合。私のマシン(Ubuntu、Cygwin)では、ドットなしで同じ結果が得られることがわかりました。

なぜ通常含まれているのですか?明示的にするのは単なる慣習ですか、それとも特定のシステムで必要だったのですか?

回答:


27

の一部のバージョン*では、find検索を開始するディレクトリであるパス引数を指定する必要があります。ドット.は、通常、現在のディレクトリが単に検索したい場所であることを表します。

これを検索のベースにしたい任意のパスに置き換えることができます。findの一部のバージョンでは、パス引数が存在しない場合、現在のディレクトリが暗示されるため、これを残すことができます。

man find引数の詳細については、シェルで実行できます。たとえば、使用法の概要、私は、パス引数がオプションであることを示しています(角括弧内[]):

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

私を走らせたら find引数なしでをすると、現在のフォルダーから始まるすべてのファイルとディレクトリが返されます。この例では、検索を開始する必要があることを明示的に示し、検索フィルターの1つとして.-name foo.txtを含めています。

*特に、すべてのBSDバリアント、POSIX標準に厳密に準拠しているものGNU findでは、オプションにすることができます。


1
findのどのバージョンがこれを必要としているのかを知っていますか?または、さらに調査するためにどこを見ることができますか?(検索はグーグルに難しいです)
エリックウィルソン

デフォルトの検索パスに関する興味深いこと。
rozcietrzewiacz

2
ほとんどのBSD findバリアントにはパス引数が必要ですが、GNU findではオプションです。バリエーションが存在する場合があります。
カレブ

2
少なくとも2008 POSIX標準仕様でpathは、findの必須引数であることに注意してください。
カレブ

1
Nit pick:言うことができるので、「この[ドット]を任意のパスに置き換えることができます」→「任意のパスfind dir1 dir2 dir3 -name foo.txt
G-Manが「Reinstate Monica」と言う

5

たとえば、AIXバージョンのfindはパスを必要とし、パスが提供されない場合は実行されません。

# 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]

一部のAIXマシンには、パスなしで対処できるGNU findがインストールされている場合がありますが、

# oslevel -s
6100-03-01-0921
# /opt/freeware/bin/find -version
GNU find version 4.1
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.