5

これは皆さんにとって非常に簡単なことですが、この質問に対する決定的/正式な答えは見つかりません.

ディレクトリ A にいるとします。

「A/*」はおそらく、A 内のすべてのファイルとフォルダーを直接意味します。

「A/**」は、A 内のすべてのファイルとフォルダー、および A 内に直接あるすべての子内のすべてのファイルとフォルダーを意味します (基本的に、ルート フォルダーの 1 レベル深いレベルをトラバースする /* 演算子の拡張) ? 別名 "/** " = "/* /* " )

私の「直接内部」という用語は間違っているかもしれません。「直系の子」とか言ったほうがいいかもしれませんが、お分かりですね。

では、「A/**/*」とはどういう意味ですか?"A/* /* /* " と同じですか?

これは基本的なことのように思えますが、演算子の正式な定義がない場合、かなり混乱します。

私は現在 Javascript を使用しており、Gruntfile を変更しようとしています。しかし、これらの演算子はどのような文脈でも登場する可能性があると思います。

4

2 に答える 2

8

この動作は JavaScript に固有のものではなく、どの演算子とも関係ありません。JavaScript に関する限り、これは単なる文字列です。

このようなグロブ展開の処理は、特定のライブラリ/コンシューマによって決定されます。gruntjs については、Grunt Globbing Patternsで説明されています。

多くの場合、すべてのソース ファイルパスを個別に指定することは実際的ではないため、Grunt は組み込みのノード グロブ ライブラリとミニマッチ ライブラリを介してファイル名展開 (グロビングとも呼ばれます) をサポートします。

  • *任意の数の文字に一致しますが、一致しません/

  • **/パス部分の唯一のものである限り、 を含む任意の数の文字に一致します

ほとんどの人が知っておく必要があるfoo/*.jsのは、 foo/ サブディレクトリ内のfoo/**/*.js.js で終わるすべてのファイルに一致するが、 foo/ サブディレクトリとそのすべてのサブディレクトリ内の .js で終わるすべてのファイルに一致するということです。

そのため(ただし、特定のドキュメントを参照してください!)、/**/一般に「ディレクトリの任意の深さに一致する」ことを意味し、/*/または/*「単一のディレクトリまたはファイル部分に一致する」ことを意味します。


gruntjs のドキュメントは**、標準"/**/*.x"パターンの特定のメカニズムについて少し曖昧ですが、 node-globを参照すると、次のようになります。

"globstar" ( **) がパス部分に単独である場合、一致を検索するゼロ以上のディレクトリおよびサブディレクトリに一致します。シンボリック リンクされたディレクトリはクロールしません。

[.. 二重星文字] は bsdglob および bash 4.3 の方法でサポートされており、パス部分で唯一のものである場合に** のみ特別な意味を持ちます。つまり、a/**/bに一致a/x/y/bしますが、一致しa/**bません。

この知識を使用して、中間ディレクトリの数ごとに 、 、 などとのA/**/f等価性 (パス コンポーネントとして使用した場合) を取得します。A/fA/*/fA/*/*/f

于 2014-12-19T22:16:47.180 に答える
0

これはA/**/*、 folder の下のすべてのフォルダーのツリーを再帰的に検索することを意味しますA。詳細については、基本的な Linux スタイルのファイル コマンドを参照してください。

于 2014-12-19T22:15:06.613 に答える