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のマニュアルページから、以下の情報が表示されます。

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

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

私のfindバージョンは、

find --version find (GNU findutils) 4.4.2 

誰かが-maxdepth 0オプションが役立つ場合の指針を教えてください。 ?

EDIT

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

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

回答

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

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

では、ドキュメントの内容を見てみましょう。

-maxdepth0はonlを意味しますyテストとアクションをコマンドライン引数に適用します。

上記の最初の例では、ディレクトリ.はコマンドラインに表示されます。 .の名前は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

コメント

  • ありがとうございます。しかし、コマンドラインでいくつかのファイル名を渡すにはどうすればよいですか?
  • 良い点です。私の更新された答えを参照してください。最初のテストの前に、いくつでも置くことができます。例:find * -maxdepth 0 -name "file1"*は、コマンドラインの現在のディレクトリにあるすべてのファイルを一覧表示します。
  • @Ramesh Answerは、より良い説明と例で再度更新されます。
  • ありがとうございます。最新の更新の詳細で質問を更新しました。
  • @Ramesh文書化されていませんが、同じ動作が見られます:findはそれぞれを確認しますコマンドラインのパスとレポートは、重複している場合でもそれぞれの一致を報告します。

回答

ディレクトリ内で(ディレクトリではなく)ファイルを非再帰的に検索する場合:

 find . -maxdepth 1 -type f -name "file1" # ./file1  

-maxdepth 0 を検索しません。 findで引数として指定したファイル/ディレクトリ名の間でのみ一致を試みます。例えば。上記のステートメントで、値0を使用すると、file1.に一致させようとします。一致しません。 .の代わりに*を渡すと、bashは*を現在のディレクトリ内のファイルのリストに置き換えます。一致を返します。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です