ディレクトリの操作を行うためのクラスです。
self[*pattern] -> [String][permalink][rdoc]glob(pattern, flags = 0) -> [String]glob(pattern, flags = 0) {|file| ...} -> nilワイルドカードの展開を行い、パターンにマッチするファイル名を文字列の配列として返します。パターンにマッチするファイルがない場合は空の配列を返します。
ブロックが与えられたときはワイルドカードにマッチしたファイルを引数にそのブロックを 1 つずつ評価して nil を返します
Dir.glob("*") #=> ["bar", "foo"]
Dir.glob("*", File::FNM_DOTMATCH) #=> [".", "..", "bar", "foo"]
ワイルドカードには以下のものがあります。これらはバックスラッシュによりエスケープすることができます。ダブルクォートの文字列中では 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"]
p Dir.glob("f*\0b*") # => ["foo", "bar"]
# ワイルドカードの例
Dir.glob("*") #=> ["foo", "bar"]
Dir.glob("fo?") #=> ["foo"]
Dir.glob("[^f]*") #=> ["bar"]
Dir.glob("{b,f}*") #=> ["bar", "foo"]
chdir -> 0[permalink][rdoc]chdir(path) -> 0chdir {|path| ... } -> objectchdir(path) {|path| ... } -> objectカレントディレクトリを path に変更します。
path を省略した場合、環境変数 HOME または LOGDIR が設定されていればそのディレクトリに移動します。カレントディレクトリの変更に成功すれば 0 を返します。
ブロックが指定された場合、カレントディレクトリの変更はブロックの実行中に限られます。ブロックの実行結果を返します。
例:
Dir.chdir("/var/spool/mail")
p Dir.pwd #=> "/var/spool/mail"
Dir.chdir("/tmp") do
p Dir.pwd #=> "/tmp"
end
p Dir.pwd #=> "/var/spool/mail"
chroot(path) -> 0[permalink][rdoc]ルートディレクトリを path に変更します。
スーパーユーザだけがルートディレクトリを変更できます。ルートディレクトリの変更に成功すれば 0 を返します。各プラットフォームのマニュアルの chroot の項も参照して下さい。
例:
p Dir.glob("*") #=> ["file1", "file2]
Dir.chroot("./")
p Dir.glob("/*") #=> ["/file1", "/file2]
[SEE_ALSO] http://opengroup.org/onlinepubs/007908799/xsh/chroot.html
delete(path) -> 0[permalink][rdoc]rmdir(path) -> 0unlink(path) -> 0ディレクトリを削除します。ディレクトリは空でなければいけません。ディレクトリの削除に成功すれば 0 を返します。
例:
Dir.delete("/tmp/hoge-jbrYBh.tmp")
empty?(path_name) -> bool[permalink][rdoc]path_name で与えられたディレクトリが空の場合に真を返します。ディレクトリでない場合や空でない場合に偽を返します。
Dir.empty?('.') #=> false
Dir.empty?(IO::NULL) #=> false
require 'tmpdir'
Dir.mktmpdir { |dir| Dir.empty?(dir) } #=> true
entries(path) -> [String][permalink][rdoc]entries(path, encoding: Encoding.find("filesystem")) -> [String]ディレクトリ path に含まれるファイルエントリ名の配列を返します。
例:
Dir.entries('.') #=> [".", "..", "bar", "foo"]
[SEE_ALSO] Dir.foreach
exist?(file_name) -> bool[permalink][rdoc]file_name で与えられたディレクトリが存在する場合に真を返します。そうでない場合は、偽を返します。
Dir.exist?(".") # => true
Dir.exists?(".") # => true
File.directory?(".") # => true
[SEE_ALSO] File.directory?
exists?(file_name) -> bool[permalink][rdoc]このメソッドは deprecated です。Dir.exist? を使用してください。
foreach(path) {|file| ...} -> nil[permalink][rdoc]foreach(path, encoding: Encoding.find("filesystem")) {|file| ...} -> nilforeach(path) -> Enumeratorforeach(path, encoding: Encoding.find("filesystem")) -> Enumeratorディレクトリ path の各エントリを表す文字列を引数として、ブロックを評価します。
ブロックが与えられなかった場合、各エントリを文字列として保持する Enumerator オブジェクトを返します。
例:
Dir.foreach('.'){|f|
p f
}
#=>
"."
".."
"bar"
"foo"
[SEE_ALSO] Dir.entries
getwd -> String[permalink][rdoc]pwd -> Stringカレントディレクトリのフルパスを文字列で返します。
例:
Dir.chdir("/tmp") #=> 0
Dir.getwd #=> "/tmp"
home -> String | nil[permalink][rdoc]home(user) -> String | nil現在のユーザまたは指定されたユーザのホームディレクトリを返します。
Dir.home や Dir.home("root") は File.expand_path("~") や File.expand_path("~root") とほぼ同じです。
例:
Dir.home # => "/home/vagrant"
Dir.home("root") # => "/root"
[SEE_ALSO] File.expand_path
mkdir(path, mode = 0777) -> 0[permalink][rdoc]path で指定された新しいディレクトリを作ります。パーミッションは mode で指定された値に umask をかけた値 (mode & ~umask) になります。 mkdir(2) も参照して下さい。ディレクトリの作成に成功すれば 0 を返します。
例:
p File.umask #=> 2
Dir.mkdir('t', 0666)
p "%#o" % (07777 & File.stat('t').mode) #=> "0664"
[SEE_ALSO] FileUtils.#makedirs
new(path) -> Dir[permalink][rdoc]new(path, encoding: Encoding.find("filesystem")) -> Diropen(path) -> Diropen(path, encoding: Encoding.find("filesystem")) -> Diropen(path) {|dir| ...} -> objectopen(path, encoding: Encoding.find("filesystem")) {|dir| ...} -> objectpath に対するディレクトリストリームをオープンして返します。
ブロックを指定して呼び出した場合は、ディレクトリストリームを引数としてブロックを実行します。ブロックの実行が終了すると、ディレクトリは自動的にクローズされます。ブロックの実行結果を返します。
例: Dir.new
require 'tmpdir' Dir.mktmpdir do |tmpdir| d = Dir.new(tmpdir) p d.class # => Dir p d.read.encoding # => #<Encoding:UTF-8> d.close d = Dir.new(tmpdir, encoding: Encoding::UTF_8) p d.class # => Dir p d.read.encoding # => #<Encoding:UTF-8> d.close end
例: Dir.open
require 'tmpdir'
Dir.mktmpdir do |tmpdir|
d = Dir.open(tmpdir, encoding: Encoding::UTF_8)
p d.class # => Dir
p d.read.encoding # => #<Encoding:UTF-8>
d.close
Dir.open(tmpdir, encoding: Encoding::UTF_8) do |d|
p d.class # => Dir
p d.read.encoding # => #<Encoding:UTF-8>
end
end
close -> nil[permalink][rdoc]ディレクトリストリームをクローズします。クローズに成功すれば nil を返します。
例:
d = Dir.new(".")
d.close # => nil
each {|item| ... } -> self[permalink][rdoc]each -> Enumeratorディレクトリの各エントリを表す文字列を引数として、ブロックを評価します。
ブロックが与えられなかった場合、各エントリを文字列として保持する Enumerator オブジェクトを返します。
例:
Dir.open('.').each{|f|
p f
}
#=>
"."
".."
"bar"
"foo"
fileno -> Integer[permalink][rdoc]self に関連づけられたファイル記述子を表す整数を返します。
Dir.open("..") { |d| d.fileno } # => 8
本メソッドでは POSIX 2008 で定義されている dirfd() 関数を使用します。
[SEE_ALSO] IO#fileno
inspect -> String[permalink][rdoc]self の情報を人間に読みやすい文字列にして返します。
例:
Dir.open("/") { |d| d.inspect } # => "#<Dir:/>"
path -> String[permalink][rdoc]to_path -> Stringオープンしているディレクトリのパス名を文字列で返します。
例:
Dir.open("..") do |d|
d.path # => ".."
d.to_path # => ".."
end
pos -> Integer[permalink][rdoc]tell -> Integerディレクトリストリームの現在の位置を整数で返します。
例:
Dir.open("/tmp") {|d|
d.each {|f|
p d.pos
}
}
pos=(pos)[permalink][rdoc]seek(pos) -> selfディレクトリストリームの読み込み位置を pos に移動させます。 pos は Dir#tell で与えられた値でなければなりません。
例:
Dir.open("testdir") do |d|
d.read # => "."
i = d.tell # => 12
d.read # => ".."
d.seek(i) # => #<Dir:0x401b3c40>
d.read # => ".."
end
read -> String | nil[permalink][rdoc]ディレクトリストリームから次の要素を読み出して返します。最後の要素まで読み出していれば nil を返します。
例:
require 'tmpdir'
Dir.mktmpdir do |tmpdir|
File.open("#{tmpdir}/test1.txt", "w") { |f| f.puts("test1") }
File.open("#{tmpdir}/test2.txt", "w") { |f| f.puts("test2") }
Dir.open(tmpdir) do |d|
p d.read # => "."
p d.read # => ".."
p d.read # => "test1.txt"
p d.read # => "test2.txt"
p d.read # => nil
end
end
rewind -> self[permalink][rdoc]ディレクトリストリームの読み込み位置を先頭に移動させます。
例:
Dir.open("testdir") do |d|
d.read # => "."
d.rewind # => #<Dir:0x401b3fb0>
d.read # => "."
end