次のコマンドを試しましたが、結果の解釈に問題があります。
ls **
それが何を出力しているのか、そしてその理由は正確にはわかりません。
次のコマンドを試しましたが、結果の解釈に問題があります。
ls **
それが何を出力しているのか、そしてその理由は正確にはわかりません。
*
ディレクトリ内でのみ一致するワイルドカードである単一の .
そのようなシェルを持っていない場合、**
はおそらく と同等です。これは*
、「0 個以上の文字に続いて 0 個以上の文字に一致する」ことは、単に「0 個以上の文字に一致する」ことと同じであるためです。
ただし、そのようなシェルがある場合、 は現在のディレクトリとサブディレクトリ**
内のすべてのファイルとディレクトリにディレクトリのみに一致します。(どちらの場合も、"ドット ファイル"、名前が , で始まるファイルは一致しません)。*
.
**
の本当の力は、より具体的なパターンで使用するときに発揮されます。たとえば、.txt
サブディレクトリに関係なくすべてのファイルを指定できますが、現在のディレクトリ内の**/*.txt
ファイル*.txt
のみに一致します。
シェルのワイルドカード マッチング ルールを調べて、シェルが何を行っているかを確認する必要があります。たとえば、bash
マニュアルには次のように書かれています。
*
null 文字列を含む任意の文字列に一致します。'globstar' シェル オプションが有効で、'*' がファイル名展開コンテキストで使用されている場合、1 つのパターンとして使用される 2 つの隣接する '*' は、すべてのファイルと 0 個以上のディレクトリおよびサブディレクトリに一致します。'/' が続く場合、隣接する 2 つの '*' はディレクトリとサブディレクトリのみに一致します。
bash
'globstar' シェル オプションの最近のバージョンでは、デフォルトで無効になっています。有効化:
shopt -s globstar
zsh もこの構文をサポートしていると思います。
ワイルドカードは、コマンドではなくシェルによって展開されることに注意してls
ください。ls **
、またはを入力ls *.txt
すると、ls
コマンド自体は*
文字を認識しません。コマンドラインでリスト全体を入力したかのように、パターンに一致するファイルの展開されたリストのみが表示されます。
二重アスタリスク ( **
) を使用すると、globを使用してファイルシステム上のファイルを一覧表示できます。グロブは、ファイル パスの照合に使用されるリテラルまたはワイルドカード文字の文字列です。ファイルシステム上のファイルを見つけるために 1 つ以上のグロブを使用することを、グロビングと呼びます。
Linux シェルとは別に、グロビングはさまざまな構成ファイルでも使用され、検索するファイルのリストを指定します。例: ファイル内で無視するファイルとフォルダー、Typescript プロジェクト内のファイル内.gitignore
のfiles
オプションinclude
など。tsconfig.json
以下は、グロビングの最も重要な側面の一部であり、二重アスタリスク ( **
) はその 1 つです。
/
)セパレータは常に/
文字です。セグメントは、2 つのセパレーターの間にあるすべてのものです。
例:Tests/HelloWorld.js
ここで、Tests
とHelloWorld.js
はセグメントで、/
はセパレータです。
*
)単一のアスタリスク ( ) は、 1 つのセグメント*
内の 0 個以上の文字に一致します。1 つのディレクトリ内のファイルをグロビングするために使用されます。
例:*.js
このグロブは のようなファイルに一致しますが、 のようなファイルには一致しHelloWorld.js
ませんTests/HelloWorld.js
Tests/UI/HelloWorld.js
**
)二重アスタリスク ( ) は、複数のセグメント**
にわたる 0 個以上の文字に一致します。ネストされたディレクトリにあるファイルをグロビングするために使用されます。
例:Tests/**/*.js
ここでは、ファイルの選択はディレクトリに制限されますTests
。グロブは、、、などのファイルに一致Tests/HelloWorld.js
しTests/UI/HelloWorld.js
ますTests/UI/Feature1/HelloWorld.js
。
?
)疑問符 ( ?
) は、1 つのセグメント内の 1 つの文字に一致します。一部のファイルまたはディレクトリの名前が 1 文字だけ異なる場合は、?
.
例:tests/?at.js
tests/cat.js
これは、、などのファイルtest/Cat.js
に一致します。test/bat.js
[abc]
)角括弧 ( [...]
) は、角括弧で囲まれた単一の文字でファイルをグロブします。
例:tests/[CB]at.js
このグロブは、tests/Cat.js
またはのようなファイルに一致しますtests/Bat.js
[a-z]
)角括弧範囲 ( [a-z]
) は、範囲内で指定された 1 文字に一致します。
例:tests/feature[1-9]/HelloWorld.js
このグロブはtests/feature1/HelloWorld.js
、 などのファイルに一致test/feature2/HelloWorld.js
します... 9
.
!
)一部のファイルを除外するには、否定 (!) を使用できます。
例 1:tests/[!C]at.js
これにより、ファイルが除外され、、、、などのファイルと一致tests/Cat.js
します。tests/Bat.js
tests/bat.js
tests/cat.js
否定は、一部のファイルを否定または除外するために、配列内の構成ファイルでも使用されます。
例 2:['Tests/**/*.js', '!Tests/UI/**']
これにより、ディレクトリからすべてのファイルとフォルダーが除外されますTests/UI
。
それでおしまい!それが役立つことを願っています!