Linuxでは、
cd /tmp
mkdir foo; cd foo
今実行
find . -name 'foo'
出力がありません。走っている間
find /tmp/foo -name 'foo'
与えられた出力は/tmp/foo
私には理解できません。誰かが理由を説明できますか?
ベストアンサー1
find
指定されたディレクトリツリーに移動し、見つかったファイルごとに指定された式を評価します。巡回は指定されたパスから始まります。仕組みをまとめると、次のようになりますfind . -name foo
。
- コマンドラインの最初のパス:
.
- basename(
.
)がパターンと一致していますかfoo
?いいえ、だから何もしないでください。
これは/tmp/foo
同じディレクトリの別の名前です。しかし、find
それを知りません(知ろうと努力してはいけません)。 - パスはディレクトリですか?はい、繰り返し見てください。リスト内の項目を列挙
.
し、各項目に対して反復処理を実行します。- ディレクトリは空です。および
.
その他の項目は含まれておらず、再帰的には検索されません。そして作業が完了しました。..
find
- ディレクトリは空です。および
- basename(
そしてfind /tmp/foo
:
- コマンドラインの最初のパス:
/tmp/foo
- basename(
foo
)がパターンと一致していますかfoo
?はい、条件が満たされました。- この条件に関連するジョブがないため、パスを印刷する基本ジョブが実行されます。
- パスはディレクトリですか?はい、繰り返し見てください。リスト内の項目を列挙
/tmp/foo
し、各項目に対して反復処理を実行します。- ディレクトリは空です。および
.
その他の項目は含まれておらず、再帰的には検索されません。そして作業が完了しました。..
find
- ディレクトリは空です。および
- basename(
.
とは/tmp/foo
同じディレクトリですが、find
同じ動作を保証するのに十分ではありません。このfind
コマンドには、同じファイルへのパスを区別する方法があり、-name
その1つが述部です。find /tmp/foo -name foo
開始ディレクトリとその下に指定されたすべてのエントリと一致しますfoo
。find . -name .
開始ディレクトリのみが一致します(.
再帰巡回中には見つかりません)。