find コマンドとワイルドカード文字による内部拡張

find コマンドとワイルドカード文字による内部拡張

私はまだコマンド ラインを学習中であり、find コマンド内でのワイルドカードの使用を完全に理解するのに苦労しています。

私はディレクトリ user/temp で作業しており、次のように find コマンドを使用してすべての .txt ファイルを検索します。

find . -name *.txt -print

次のようなエラーが発生します:

find: unknown primary or operator.

*.txt展開を回避して目的の結果を得るには、 in を一重引用符で囲む必要があることはわかっていますが、なぜそうする必要があるのか​​理解できません。

*内部で展開が行われるようにエスケープする必要があると読みましたfind。 を一重引用符で囲むと、コマンド ラインで特殊文字として解釈されなくなると思っていたので混乱しています。*では、展開はどのように行われるのでしょうか。

答え1

ここでは、 を拡張しようとする部分が 2 つあります*。シェルが呼び出しているときfind、またはfindシェルが引数を処理/使用しているときです。

シングルクォートで囲まない場合は、シェルが展開します。したがって、現在のディレクトリにa.txtとb.txtがある場合、コマンドラインは次のように展開されます。

find . -name *.txt -print

find . -name a.txt b.txt -print

findこれは有効なコマンドではありません

一重引用符で囲むと、シェルにそのままにしておくように指示するため、find文字列が*.txt引数として取得され-name、潜在的な名前を照合するときに使用されます。

答え2

ファイル名を二重引用符で囲んでみてください。

検索 . -name "*.txt" -print

私のシステム(Debian 8)では動作します

関連情報