Ruby Tips!

RubyのTipsを紹介します

ワイルドカードにマッチするパスの一覧を取得する

Dir.globを使えばシェル風のワイルドカードにマッチしたパスの一覧を取得することができる。Dir.globで指定できるワイルドカードには以下がある。

ワイルドカード 意味
* 任意の文字列
? 任意の1文字
[] 括弧内のいずれかの文字
{} 括弧内の文字の組み合わせ(*)
**/ ワイルドカード*/の0回以上の繰り返し

(*) foo{a,b,c}はfooa, foob, foocに展開される

Dir.globの第1引数には文字列または文字列の配列をとりパスのパターンを複数指定することができる。第2引数にはFile.fnmatchと同様のフラグが指定して、マッチの挙動を変えることができる。以下にDir.globを使った例を示す。

Dir.glob("*.rb") # カレントディレクトリ以下の.rbファイルの一覧
Dir.glob("*.?") # カレントディレクトリ以下の拡張子が1文字のファイルの一覧
Dir.glob("*.[ch]") # カレントディレクトリ以下のCファイルとヘッダファイルの一覧
Dir.glob("*.{htm,html}") # カレントディレクトリ以下のHTMLファイルの一覧
Dir.glob("**/*") # カレントディレクトリ以下のすべてのファイルとディレクトリの一覧(再帰的)
Dir.glob("**/") # カレントディレクトリ以下のすべてのディレクトリの一覧(再帰的)