同じフォルダ名を持つ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)
strace
find
ls
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
ファイルシステムのデフォルトシステムコールから返された内容が最初に取得されます。