私は生涯の間にfind
テストがどのように-name
機能するかを理解することはできません。
実行すると、find / -name *in
次の結果が返されます。
/sbin
/sbin/sulogin
/dev/stdin
いくつか言えば。
これはファイル名拡張を実行するのと同じですが、シェルがコマンドを実行する前に発生するため、これはできません。また、現在のディレクトリに一致するファイルがないためです*in
。さらに、単一引用符は*in
同じ結果を生成し、これはファイル名拡張子にすることができないという追加の証拠です。
ドキュメントによると、find
withは-name
正規表現を使用しますが、正規表現パターンは上記の*in
結果と一致しません。
誰かが私を実現できますか?
ベストアンサー1
渡された引数は-name
ファイルシステムです。全体的な状況モードは他のコマンドに入力するのと同じですls -l *in
。
見つかった各ファイルについて比較します。基本名渡したスキーマにファイルを追加します。したがって、一致しないものを比較するとスキップされますが、比較すると一致する/bin/foobar
ため印刷さfoobar
れます。*in
/bin/login
login
*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