回答:
引用符で囲まれていないグロブ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.pycbar.pycその後*.pyc、両方の名前に展開されます。だからあなたが書くなら:
find . -name *.pyc -delete
その後、シェルは実際に次を呼び出します:
find . -name foo.pyc bar.pyc -delete
に対しては1つの引数しか持てないため、これはあまり意味がありません-name。そのため、シェルによって解釈されないように特殊文字をエスケープする必要があります。これは、バックスラッシュエスケープ、または引用符で囲みます。
findはNON-BUGS、例と同様のもので呼び出されるセクションと、それが必要な理由の説明が必要です。