名前の検索はどのように機能しますか?

名前の検索はどのように機能しますか?

私は生涯の間にfindテストがどのように-name機能するかを理解することはできません。

実行すると、find / -name *in次の結果が返されます。

/sbin
/sbin/sulogin
/dev/stdin

いくつか言えば。

これはファイル名拡張を実行するのと同じですが、シェルがコマンドを実行する前に発生するため、これはできません。また、現在のディレクトリに一致するファイルがないためです*in。さらに、単一引用符は*in同じ結果を生成し、これはファイル名拡張子にすることができないという追加の証拠です。

ドキュメントによると、findwithは-name正規表現を使用しますが、正規表現パターンは上記の*in結果と一致しません。

誰かが私を実現できますか?

ベストアンサー1

渡された引数は-nameファイルシステムです。全体的な状況モードは他のコマンドに入力するのと同じですls -l *in

見つかった各ファイルについて比較します。基本名渡したスキーマにファイルを追加します。したがって、一致しないものを比較するとスキップされますが、比較すると一致する/bin/foobarため印刷さfoobarれます。*in/bin/loginlogin*in

*in現在のディレクトリのファイルに基づいてコマンドラインに一致がある可能性があるので、注意が必要です。

たとえば、次のようになります。

$ find /bin -name *in
/bin
/bin/login

$ touch foobarin

$ find /bin -name *in
$ 

同じfindコマンドが2つの異なる結果を返すことに注意してください。

シェルをデバッグモードに設定すると、その理由がわかります。

$ rm foobarin 

$ set -x

$ find /bin -name *in
+ find /bin -name '*in'
/bin
/bin/login

$ touch foobarin     
+ touch foobarin

$ find /bin -name *in
+ find /bin -name foobarin

$ 

aで始まる行は、+入力されたコマンドのシェルの解釈です。 2番目のコマンドが既存のファイル名と一致するように find拡張されていることがわかります。*in

このためお勧めです。引用する名前

$ find /bin -name '*in'
+ find /bin -name '*in'
/bin
/bin/login

おすすめ記事