singleton method Dir.[]

self[*pattern, base: nil, sort: true] -> [String][permalink][rdoc][edit]
glob(pattern, flags = 0, base: nil, sort: true) -> [String]
glob(pattern, flags = 0, base: nil, sort: true) {|file| ...} -> nil

ワイルドカードの展開を行い、パターンにマッチするファイル名を文字列の配列として返します。パターンにマッチするファイルがない場合は空の配列を返します。

ブロックが与えられたときはワイルドカードにマッチしたファイルを引数にそのブロックを 1 つずつ評価して nil を返します

[PARAM] pattern:
パターンを文字列か配列で指定します。配列を指定すると複数のパターンを指定できます。
[PARAM] flags:
File.fnmatch に指定できるフラグと同様のフラグを指定できます。このフラグを指定することでマッチの挙動を変更することができます。

Dir.glob("*")                      #=> ["bar", "foo"]
Dir.glob("*", File::FNM_DOTMATCH)  #=> [".", "..", "bar", "foo"]
[PARAM] base:
カレントディレクトリの代わりに相対パスの基準にするベースディレクトリを指定します。指定した場合、結果の頭にはベースディレクトリはつかないので、絶対パスが必要な場合はベースディレクトリを追加する必要があるでしょう。
[PARAM] sort:
true ならワイルドカードや文字セット(鈎括弧)にマッチした結果をバイナリとして昇順にソートします。 false を指定するとソートせず2.7以前と同じ挙動になります。 true の場合でも、配列で指定した複数のパターンや波括弧での順番は保存されます。

ワイルドカードには以下のものがあります。これらはバックスラッシュによりエスケープすることができます。ダブルクォートの文字列中では 2 重にエスケープする必要があることに注意してください。ワイルドカードはデフォルトではファイル名の先頭の "." にマッチしません。

*

空文字列を含む任意の文字列と一致します。

?

任意の一文字と一致します。

[ ]

鈎括弧内のいずれかの文字と一致します。- でつながれた文字は範囲を表します。鈎括弧の中の最初の文字が ^ である時には含まれない文字と一致します。 ^ の代わりに ksh や POSIX shell のように ! も同じ意味で使えます。

{ }

コンマで区切られた文字列の組合せに展開します。例えば、 foo{a,b,c} は fooa, foob, fooc に展開されそれぞれに対してマッチ判定を行います。

括弧は入れ子にすることができます。例えば、 {foo,bar{foo,bar}} は foo, barfoo, barbar のそれぞれにマッチします。

**/

ワイルドカード */ の0回以上の繰り返しを意味し、ディレクトリを再帰的にたどってマッチを行います。例えば, foo/**/bar は foo/bar, foo/*/bar, foo/*/*/bar ... (以下無限に続く)に対してそれぞれマッチ判定を行います。


# 一般的な例
p Dir.glob("*")          #=> ["foo", "bar", "baz"]
p Dir.glob("./b*")       #=> ["./bar", "./baz"]      先頭に "./" が付いている。
p Dir.glob("*/")         #=> ["foo/"]                ディレクトリのみにマッチする。
p Dir.glob("wrong_name") #=> []                      マッチしないと空の配列を返す。

Dir.glob("b*") {|f| p f }

#=> "bar"
#   "baz"

# 複数のパターンを指定する例
p Dir.glob(["f*", "b*"]) # => ["foo", "bar"]
p Dir["f*", "b*"]        # => ["foo", "bar"]

# ワイルドカードの例
Dir.glob("*")            #=> ["foo", "bar"]
Dir.glob("fo?")          #=> ["foo"]
Dir.glob("[^f]*")        #=> ["bar"]
Dir.glob("{b,f}*")       #=> ["bar", "foo"]

# ベースディレクトリの例
rbfiles = File.join("**", "*.rb")
Dir.glob(rbfiles)                   #=> ["main.rb",
                                    #    "lib/song.rb",
                                    #    "lib/song/karaoke.rb"]
Dir.glob(rbfiles, base: "lib")      #=> ["song.rb",
                                    #    "song/karaoke.rb"]