ワイルドカードと検索コマンド。ワイルドカードを「」で囲むことと結び付けないことの違い

ワイルドカードと検索コマンド。ワイルドカードを「」で囲むことと結び付けないことの違い

ファイル数が1つを超えると機能しますが、機能しないのはなぜですかfind . -name "*.jav"?彼らの機能は何ですか?なぜリテラル文字列として解釈されないのですか?find . -name *.jav.jav" ""*.jav"

ベストアンサー1

ワイルドカードはコマンドではなくシェルによって拡張されます。find自分の時間にシェルに似たワイルドカードマッチングを実行する数少ないコマンドの1つです。

を実行すると、最初ls *.javにシェルが*.jav一致するファイルのリスト(たとえば)に展開され、次に結果引数listとともにシェルが呼び出されます。そのため、ファイルについて何も知らず、その引数がファイル名であるかどうかに関係なく、同じファイル名のリストが表示されます。file1.jav file2.jav file3.javlsfile1.jav file2.jav file3.javecho *.javecho

実行時find . -name "*.jav"

  1. シェルはコマンドラインを解析して特殊文字を識別し、それを単語と句読点に分割します。引用された単語find.のリストのみがあります。引用されているので、シェルに関する限り、これは一般的な文字です。-name*.jav**
  2. シェルは、find指定された引数リスト(.、、、-name)を使用してコマンドを実行します*.jav
  3. find*.jav現在のディレクトリの下のすべてのディレクトリで、パターンと一致する名前のファイルを探します。

実行したがfind . -name *.jav一致するファイルがない場合*.jav

  1. シェルはコマンドラインを解析して特殊文字を識別し、それを単語と句読点に分割します。これは引用されていない単語findのリストにすぎません。.-name*.jav*
  2. 単語に*.jav引用符がないワイルドカードが含まれているため、シェルはファイル名の生成を実行します。一致するファイル名がないため、パターンは拡張されていません。
  3. シェルはfind結果パラメーターのリスト(例えば、、、.-nameを使用してコマンドを実行します*.jav
  4. find*.jav現在のディレクトリの下のすべてのディレクトリで、パターンと一致する名前のファイルを探します。

実行すると、find . -name *.jav現在のディレクトリにfile1.javfile2.javおよび次が含まれますfile3.jav

  1. シェルはコマンドラインを解析して特殊文字を識別し、それを単語と句読点に分割します。これは引用されていない単語findのリストにすぎません。.-name*.jav*
  2. 単語*.javに引用符のないワイルドカードが含まれているため、シェルはファイル名の生成を実行します。*.javつまり、一致するファイル名のリストに置き換えられます。
  3. シェルは、find結果引数のリスト(たとえば、、、、、、.など)を使用してコマンドを実行します。-namefile1.javfile2.javfile3.jav
  4. find到着時に構文エラーについて文句を言いますfile2.jav

実行すると、find . -name *.jav現在のディレクトリに一致する単一のファイルが含まれますfile.jav

  1. シェルはコマンドラインを解析して特殊文字を識別し、それを単語と句読点に分割します。これは引用されていない単語findのリストにすぎません。.-name*.jav*
  2. 単語*.javに引用符のないワイルドカードが含まれているため、シェルはファイル名の生成を実行します。*.javつまり、一致するファイル名のリストに置き換えられます。
  3. シェルはfind結果パラメーターのリスト(例えば、、、.-nameを使用してコマンドを実行しますfile.jav
  4. find完全に有効なコマンドが表示されますが、望むものではないかもしれません。一致するファイルを検索する代わりに、すべてのディレクトリで呼び出されたファイルを検索するようにfind求められます。file.jav*.jav

(シェルの評価と拡張には他にも多くの機能があります。ここでは関連する機能のみを参照しました。)

(最も一般的なシェル(sh、bash、dash、kshなど)の基本的な動作について説明します。一部のシェルは、拡張されていないワイルドカードでコマンドを実行するのではなく、エラーを表示するか、一致しないワイルドカードをnullに拡張するように構成します。できます。)

おすすめ記事