同じ名前のディレクトリが存在する場合、findコマンドはどこを最初に探しますか?

同じ名前のディレクトリが存在する場合、findコマンドはどこを最初に探しますか?

同じフォルダ名を持つ2つの異なるディレクトリがあるとします。

/usr/myDir/そして/home/myDir/

次のコマンドを実行すると:

cd $(find / -type d -name myDir)

に移動します/usr/myDir。なぜこれですか?このような特別な状況に直面したとき、findコマンドはどこを最初に見ますか?

ベストアンサー1

cd次のように簡単にテストできる2つの質問があります。

bash-4.1$ mkdir first second
bash-4.1$ cd first second
bash-4.1$ pwd
/home/jdoe/first
bash-4.1$ 

したがって、cdこのシェルの場合、最初に見つかった項目が使用されます。第二に、find結果自体の並べ替えを実行することも、実行しない場合もあります。ディレクトリの場合(おそらく)-d「深さで最初に検索」オプションしかありません。これは/some/deeper/dir以前に返されます。したがって、Linuxのシステムコールが返す内容を取得します。これらの項目は特定の順序であると仮定しないでください(このような項目が自動的にソートされない限り)。/some/getdents(2)stracefindls

bash-4.1$ mkdir c ; sleep 5
bash-4.1$ mkdir b ; sleep 5
bash-4.1$ mkdir a ; sleep 5
bash-4.1$ find .
.
./b
./c
./a

疑わしい場合は、結果を並べ替える必要があります。デフォルトでは、findファイルシステムのデフォルトシステムコールから返された内容が最初に取得されます。

おすすめ記事