
私はまだコマンド ラインを学習中であり、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)では動作します