以下のようなファイル構造だとします。
.
├── ba
│ └── z.mdx
├── bar
│ └── b.mdx
├── baz
│ └── c.mdx
└── foo
└── a.mdx
3 directories, 3 files0か複数
*を使うと0か複数を表せます。
glob('ba*/**/*.mdx', (_, files) => {
console.log(files);
});これは[ 'ba/z.mdx', 'bar/b.mdx', 'baz/c.mdx' ]を得ます。*の部分は無いものでもマッチするのでbaも含まれます。
1か複数
?を使うと1か複数を表せます。
glob('ba?/**/*.mdx', (_, files) => {
console.log(files);
});これは[ 'bar/b.mdx', 'baz/c.mdx' ]を得ます。?は必ず何かしらの文字列がある必要があるので今度はbaは含まれません。
範囲
[]で囲むと範囲という意味になります。例えば[a-z]はa,b,c,d,...みたいな意味になります。
glob('qqqq/ba[a-z]/**/*.mdx', (_, files) => {
console.log(files);
});よってこれも[ 'bar/b.mdx', 'baz/c.mdx' ]を得ます。
完全マッチの複数
@(foo|b?r)と書くとfooかb?rの時にマッチします。中で?や*など使えるので柔軟に複数指定できます。
glob('qqqq/@(foo|bar)/**/*.mdx', (_, files) => {
console.log(files);
});これは[ 'foo/a.mdx', 'bar/b.mdx' ]を得ます。
複数マッチの否定
!(foo|bar)と書くとfooかbarじゃないものにマッチします。
glob('qqqq/!(foo|bar)/**/*.mdx', (_, files) => {
console.log(files);
});これは[ 'qqqq/baz/c.mdx' ]を得ます。
何でもいいディレクトリ
**を使うとディレクトリの名前・どこにあるかに関係なくマッチするようにできます。
glob('**/*.mdx', (_, files) => {
console.log(files);
});これは[ 'foo/a.mdx', 'bar/b.mdx', 'baz/c.mdx' ]を得ます。これはhoge/fuga/piyo/a.mdxというようなファイルであってもマッチします。