web-dev-qa-db-ja.com

find -maxdepth 0が出力を返さない

find -maxdepth 0オプションの使用方法を理解しようとしています。

以下のディレクトリ構造があります。

--> file1
--> parent
          --> child1
                   --> file1
                   --> file2
          --> child2
                   --> file1
                   --> file2
          --> file1

さて、以下のようにfindコマンドを実行します。

find ./parent -maxdepth 0 -name "file1"
find ./ -maxdepth 0 -name "file1"
find . -maxdepth 0 -name "file1"

上記のfindコマンドを使用しない場合、file1が返されます。

findのmanページから、以下の情報がわかります。

-maxdepth 0は、コマンドライン引数にテストとアクションのみを適用することを意味します。

-maxdepth 0オプションを使用していくつかの例を検索しましたが、適切な例が見つかりませんでした。

私のfindバージョンは、

find --version
find (GNU findutils) 4.4.2

誰かが私に、[-maxdepth 0]オプションがどのような場合に役立つかを教えてください。

[〜#〜]編集[〜#〜]

以下のコマンドを実行すると、file1が2回リストされます。これはこのように機能することを意図していますか?

find . file1 -maxdepth 1 -name "file1"
./file1
file1
19
Ramesh

現在のディレクトリにfile1があるとします。次に:

$ find . -maxdepth 0 -name "file1"
$ find . file1 -maxdepth 0 -name "file1"
file1

ここで、ドキュメントに記載されている内容を見てみましょう。

-maxdepth 0は、コマンドライン引数にテストとアクションのみを適用することを意味します。

上記の最初の例では、ディレクトリ.のみがコマンドラインにリストされています。 .にはfile1という名前がないため、出力には何も表示されません。上記の2番目の例では、.file1の両方がコマンドラインにリストされ、file1-name "file1"と一致するため、出力に返されます

つまり、-maxdepth 0は、ディレクトリまたはサブディレクトリを検索するnotを意味します。代わりに、コマンドラインに明示的にリストされているファイルから一致するファイルのみを探します。

あなたの例では、コマンドラインにディレクトリだけがリストされていて、それらのどれにもfile1という名前はありませんでした。したがって、出力はありません。

一般的に、コマンドラインで多くのファイルとディレクトリに名前を付けることができます。たとえば、ここではコマンドラインで11個のファイルとディレクトリを指定したfindコマンドを試してみます。

$ ls
d1  file1  file10  file2  file3  file4  file5  file6  file7  file8  file9
$ find d1 file1 file10 file2 file3 file4 file5 file6 file7 file8 file9 -maxdepth 0 -name "file1"
file1

パスの重複

検討してください:

$ find . file1 -maxdepth 0 -iname file1
file1
$ find . file1 file1 -maxdepth 0 -iname file1
file1
file1
$ find . file1 file1 -maxdepth 1 -iname file1
./file1
file1
file1

どうやら、Rameshが指摘しているように、findはコマンドラインで指定された各パスをたどり、パスが. fileのように同じファイルに通じていても、パスが正確であっても、一致を探します重複、file1 file1など。

26
John1024