回答:
引用符で囲まれていないグロブfind
は、実行される前にシェルによって展開されます。(マニュアルのファイル名拡張を参照してください。)
そう言って:
find . -name *.pyc -delete
実際に実行されます:
find . -name file1.pyc file2.pyc file3.pyc -delete
現在のディレクトリに3つの.pycファイルがあり、代わりにエラーが発生すると仮定します。
バックスラッシュを使用すると、シェルはグロブをfind
に渡し*.pyc
ます。つまり、引用符のように動作します。
理想的には、グロブを引用する必要があります:
find . -name '*.pyc' -delete
シェルがfind
コマンドを発行する前に、さまざまな展開が行われます。そうすることで*
、ワイルドカード(グロビング文字)である特殊文字(または特殊な意味を持つ文字)も処理します。これは、いわゆるファイル名の展開です。
ディレクトリに2つのファイルがあるとします。
foo.pyc
bar.pyc
その後*.pyc
、両方の名前に展開されます。だからあなたが書くなら:
find . -name *.pyc -delete
その後、シェルは実際に次を呼び出します:
find . -name foo.pyc bar.pyc -delete
に対しては1つの引数しか持てないため、これはあまり意味がありません-name
。そのため、シェルによって解釈されないように特殊文字をエスケープする必要があります。これは、バックスラッシュエスケープ、または引用符で囲みます。
find
はNON-BUGS
、例と同様のもので呼び出されるセクションと、それが必要な理由の説明が必要です。