
オプションの使い方を理解しようとしています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
、ファイル1返されます。
のマニュアルページからfind
、以下の情報を確認できます。
-maxdepth 0 は、テストとアクションをコマンドライン引数にのみ適用することを意味します。
オプション付きの例をいくつか検索しました-maxdepth 0
が、適切な例は見つかりませんでした。
私のfind
バージョンは、
find --version
find (GNU findutils) 4.4.2
-maxdepth 0
どのケースオプションが役立つかについて、ヒントを教えていただけませんか?
編集
以下のコマンドを実行すると、ファイル12 回リストされます。これは意図された動作ですか?
find . file1 -maxdepth 1 -name "file1"
./file1
file1
答え1
file1
現在のディレクトリに次のものがあると仮定します。
$ find . -maxdepth 0 -name "file1"
$ find . file1 -maxdepth 0 -name "file1"
file1
さて、何を見てみましょうドキュメント状態:
-maxdepth 0
テストとアクションをコマンドライン引数にのみ適用することを意味します。
上記の最初の例では、ディレクトリのみ.
コマンドラインにリストされます。.
に名前がない場合はfile1
、出力には何も表示されません。上記の2番目の例では、.
および が file1
コマンド ラインにリストされており、 とfile1
一致するため-name "file1"
、出力に が返されました。
-maxdepth 0
言い換えれば、ないディレクトリまたはサブディレクトリを検索します。代わりに、コマンド ラインに明示的にリストされているファイルの中から一致するファイルのみを検索します。
あなたの例では、コマンド ラインにはディレクトリのみがリストされており、いずれにも名前が付けられていませんでしたfile1
。したがって、出力はありません。
一般に、多くのファイルとディレクトリはコマンド ラインで名前を付けることができます。たとえば、ここではfind
コマンド ラインで 9 つのファイルとディレクトリを含むコマンドを試します。
$ ls
d1 file1 file10 file2 file3 file4 file5 file6 file7
$ find d1 file1 file10 file2 file3 file4 file5 file6 file7 -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
find
は、コマンド ラインで指定された各パスをたどり、 のようにパスが同じファイルにつながる場合でも. file
、または のようにパスが完全に重複している場合でも、一致を検索しますfile1 file1
。
答え2
ディレクトリ内のファイル(ディレクトリではない)を非再帰的に検索する場合は、次を使用します。
find . -maxdepth 1 -type f -name "file1"
# ./file1
-maxdepth 0
検索しません引数として指定したファイル/ディレクトリ名の間でのみ一致を試みますfind
。
たとえば、上記のステートメントでは、maxdepth
の値を使用して、と一致しないに0
一致しようとします。file1
.
しかし、と組み合わせてではなくを渡す*
と、bash は現在のディレクトリ内のファイルのリストに置き換え、一致するものを返します。.
-maxdepth 0
*
答え3
John1024は良い例を挙げた。どうやって使用するに-maxdepth 0
は、いつ使用するには:
さて、 の理由は何でしょうか-maxdepth 0
?名前がわかっている場合は、コマンドを発行するだけで済みます
ls file-*
まあ、あなたが探しているのは名前ではないかもしれません。
例:
touch file-{1..3}
echo "1" > file-1
touch -d @0 file-2
find * -maxdepth 0 -name "file-*" \( -size 1k -o -mtime +10000 \) -ls
669266 12 -rw-rw-r-- 1 stefan stefan 2 Mai 4 20:57 file-1
669270 8 -rw-rw-r-- 1 stefan stefan 0 Jan 1 1970 file-2
名前パターン file-* で 3 つのファイルを作成します。次に、1 番目にコンテンツを追加し、2 番目に日付をリセットし、3 番目はそのままにします。
今、私はおそらく数千のファイルの中から 1k (1 番) またはおよそ 30 年を超える年齢のファイルを検索します。この例では、3 つのファイルの中から検索します。
しかし、find * は現在のディレクトリ内のすべてのファイルを検索するため、ディレクトリについてだけではなく、「開始点」というやや異質なマニュアル ページの専門用語が使われます。find の強力なフィルター機能により、ファイルの場所 ($PWD) がわかっているファイルを検索するという決定が下されたと思いますが、標準のシェル ツールでは他の属性を簡単にフィルターすることはできません。