find [duplicate]のパラメータ-nameと一致する値に二重引用符を使用してください。

find [duplicate]のパラメータ-nameと一致する値に二重引用符を使用してください。

パラメータ-nameと一致する値をfind二重引用符で囲む必要があるのはなぜですか?

# find / -type f -name *.out |wc -l 1>mv.out                                  
0403-027 The parameter list is too long.
# cat mv.out                                                   
       0
# find / -type f -name "*.out" |wc -l 1>mv.out                                   
# cat mv.out                                                                                           
  146302

答え1

二重引用符がない場合、シェルは展開されます。これは、現在のディレクトリで一致するすべてのファイル名(主にドットで終わるがドットで始まらないすべてのファイル)*.outに置き換えられることを意味します。あなたの場合、引数として渡された2つ以上の一致するファイルがあるようです。どうすればいいのかわからず、引数リストが長すぎると文句を言います。*.out.outfindfind

パターンを引用するとシェルはそのまま残り、引用符を削除するとfind変更されていないパラメータが表示されます*.out。これはおそらく欲しいものです。

答え2

これが完全にフィットするかどうかはわかりません。しかし、私はそれを引用符で囲むと、パーサーがそれを正規表現で読むことになると信じています。引用符がない場合、アスタリスクは現在のディレクトリ内のすべてのファイルを表します。

以下の出力差を確認してください。

$ echo $(find ./ -name *)

そして

$ echo $(find ./ -name "*")

したがって、最初のコマンドを使用するとエラーが発生する可能性があります。ファイルがあれば金持ち&バー現在のディレクトリでは、アスタリスクはファイル名を表します。したがって、コマンドパーサーは次のコマンドを読み取ります。

$ echo $(find ./ -name foo bar)

エラー出力はですfind: bar: unknown primary or operator

2番目のコマンドは、アスタリスクをすべてのファイル名を検索するという意味の正規表現として読み込みます。

編集する:コマンドをさらにテストした後、一部のテキストがアスタリスクと組み合わせている限り、パラメータ値が引用符で囲まれているかどうかにかかわらず、私のシステムで機能するように見えます。

$ echo $(find ./ -name *foo)

同じですか?

$ echo $(find ./ -name "*foo")

たぶん私は質問を誤解したのでしょうか?

関連情報