LinuxでGNU findを使用している場合、異なるテスト実行で両方の注文を取得します。
テストケース:
rm -rf /tmp/depthtest ; mkdir -p /tmp/depthtest ; cd /tmp/depthtest ; for dir in 1 2 3 . ; do mkdir -p $dir ; touch $dir/.note ; done ; find . -iname '.note'
このテストでは、ポスターの最初の結果が得られます。の順序に注意してください1 2 3 .
。この順序を に変更すると. 1 2 3
rm -rf /tmp/depthtest ; mkdir -p /tmp/depthtest ; cd /tmp/depthtest ; for dir in . 1 2 3 ; do mkdir -p $dir ; touch $dir/.note ; done ; find . -iname '.note'
ポスターの 2 番目の結果を取得します。
どちらの場合でも、 find に -depth を追加しても何も起こりません。
編集:
これをさらに調べるために、perlワンライナーを書きました:
perl -e 'opendir(DH,".") ; print join("\n", readdir(DH)),"\n" ; closedir(DH)'
テストケース 1 を実行した後、/tmp/depthtest に対してこれを実行し、次の結果を得ました。
.
..
1
2
3
.note
テストケース 2 の後に再度実行すると、次の結果が得られました。
.
..
.note
1
2
3
結果がディレクトリ順であることを確認します。
検索のみの-depth
オプションは、 eg./1/.note
が の前または後./1/
に処理されるかどうかを制御します./.note
。/1/
が最初であるため、結果の順序は純粋にディレクトリの順序 (主に作成順序) に基づいています。
ある場所にあるすべてのディレクトリを幅優先で再帰的に一覧表示するにはどうすればよいですか? を参照すると役立つ場合があります。この問題を回避する方法を学びます。