find コマンドにおける \*.xml と *.xml の違い

find コマンドにおける \*.xml と *.xml の違い

Linux/Macのfindコマンドの\*.xmlとの違いは何ですか?*.xml

の結果:

find . -name \*.xml and find . -name *.xml違います。でも、なぜでしょうか?

また、locate '*.xml'find よりも優れているのはどれですか? 最もよく使用されるのはどれですか?

答え1

findアスタリスクをエスケープすると、一致するリテラル文字列が提供され*.xml、シェルに関係なく、内部的にワイルドカードとして解析される可能性があります。アスタリスクをエスケープまたは引用符で囲まなかった場合、コマンドによって変更される前に、シェルによってアスタリスクが展開されますfind

たとえば、somefile.xmlディレクトリ内にファイルが 1 つしかない場合、シェルはワイルドカードを展開し、リテラル文字列をsomefile.xmlコマンドに渡します。つまり、次のようになります。

sh-4.1$ find . -name *.xml

これは次のものと全く同じです:

sh-4.1$ find . -name somefile.xml

これは、正確なファイル名にのみ一致します。ディレクトリ内に*.xmlワイルドカードに一致するファイルが 2 つある場合、ワイルドカードが展開されると構文エラーが発生する可能性があります。

sh-4.1$ find . -name somefile.xml someotherfile.xml
find: paths must precede expression: someotherfile.xml
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

どちらが優れているかはlocate、実際に何に使うかによります。 はlocateはるかに高速ですが、事前に構築されたインデックスに依存しているため、最新のインデックス更新 (通常は毎日行われますが、ディストリビューションによって異なります) と同等の性能しかありません。また、ファイル名の一致に基づいて結果を返すだけですが、 ではfind検索を絞り込むためのオプションが豊富に用意されています。

関連情報