taquaki-satwo
3/7/2019 - 2:33 AM

globによるファイルパスのパターンマッチ

Globの書式

https://github.com/isaacs/node-glob

Globの概要

Globは ls*.js をコマンドラインで指定したり、 .gitignoreファイル内でbuild/* を指定するようにファイルをフィルタリングできます。

パスのパターンを解釈する前に、{}で囲まれたBraced Sectionをパターン内に展開します。 コンマ区切りで複数のキーワードを指定します。 {}内にスラッシュ(/)を含めることもでき、a{/b/c,bcd}と指定すると、a/b/cとabcdに展開します。

  1. * 1つのパスの0以上の文字列に一致
  2. ? 1文字分の任意の文字に一致
  3. [...] 文字の範囲に一致。正規表現の範囲と同様のもの。最初の文字が ! か ^ だった場合、指定した範囲外のすべての文字に一致
  4. !(パターン|パターン|パターン) |で区切って書いたパターンに合致しない文字列に一致
  5. ?(パターン|パターン|パターン) 全く一致しないか、パターンのいずれか1つに一致
  6. +(パターン|パターン|パターン) パターンの1つ以上が一致
  7. *(a|b|c) 0以上のパターンと一致
  8. @(パターン|pat*|pat?erN) パターンのうちの1つに完全に一致
  9. ** パスの該当箇所を任意のディレクトリーに置き換えて、ディレクトリーやサブディレクトリーを探査する。シンボリックリンクは探査しない

ドット

ファイルやディレクトリーパスの最初が . だった場合、同じく . から始まるパターン以外のglobのパターンとは一致しません。 例えば、 a/.*/c というパターンは、a/.b/c というファイルと一致します。しかし、 a/*/c とした場合は、 . から開始していないのでa/.b/cとは一致しません。

dot:true オプションを指定すると、ドットを通常のキャラクターと同様に扱うことができます。

Basename のマッチング

matchBase:true オプションを指定してパターンにスラッシュを含まない場合、baseName以下にあるすべてのファイルを検索します。 *.js というパターンは、 test/simple/basic.js に一致します。