要約
ディレクトリの操作を行うためのクラスです。
目次
- 特異メソッド
- インスタンスメソッド
- 追加されるメソッド
継承しているメソッド
- Enumerableから継承しているメソッド
-
- all?
- any?
- chain
- chunk
- chunk_while
- collect
- collect_concat
- compact
- count
- cycle
- detect
- drop
- drop_while
- each_cons
- each_entry
- each_slice
- each_with_index
- each_with_object
- entries
- filter
- filter_map
- find
- find_all
- find_index
- first
- flat_map
- grep
- grep_v
- group_by
- include?
- inject
- lazy
- map
- max
- max_by
- member?
- min
- min_by
- minmax
- minmax_by
- none?
- one?
- partition
- reduce
- reject
- reverse_each
- select
- slice_after
- slice_before
- slice_when
- sort
- sort_by
- sum
- take
- take_while
- tally
- to_a
- to_h
- uniq
- zip
特異メソッド
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 に指定できるフラグと同様のフラグを指定できます。このフラグを指定することでマッチの挙動を変更できます。
p Dir.glob("*") #=> ["bar", "foo"] p 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"] # ワイルドカードの例 p Dir.glob("*") #=> ["foo", "bar"] p Dir.glob("fo?") #=> ["foo"] p Dir.glob("[^f]*") #=> ["bar"] p Dir.glob("{b,f}*") #=> ["bar", "foo"] # ベースディレクトリの例 rbfiles = File.join("**", "*.rb") p Dir.glob(rbfiles) #=> ["main.rb", # "lib/song.rb", # "lib/song/karaoke.rb"] p Dir.glob(rbfiles, base: "lib") #=> ["song.rb", # "song/karaoke.rb"]
- [PARAM]
chdir -> 0[permalink][rdoc][edit]chdir(path) -> 0chdir {|path| ... } -> objectchdir(path) {|path| ... } -> object-
カレントディレクトリを path に変更します。
path を省略した場合、環境変数 HOME または LOGDIR が設定されていればそのディレクトリに移動します。カレントディレクトリの変更に成功すれば 0 を返します。
ブロックが指定された場合、カレントディレクトリの変更はブロックの実行中に限られます。ブロックの実行結果を返します。
- [PARAM]
path: - ディレクトリのパスを文字列で指定します。
- [EXCEPTION]
Errno::EXXX: - 失敗した場合に発生します。
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" # ~ は展開されない p Dir.chdir("~/.ssh") # => Errno::ENOENT - [PARAM]
children(path) -> [String]Ruby 2.5.0 から[permalink][rdoc][edit]children(path, encoding: enc) -> [String]-
ディレクトリ path に含まれるファイルエントリ名のうち、 "." と ".." をのぞいた配列を返します。
- [PARAM]
path: - ディレクトリのパスを文字列で指定します。
- [PARAM]
encoding: - ディレクトリのエンコーディングを文字列か Encoding オブジェクトで指定します。省略した場合はファイルシステムのエンコーディングと同じになります。
- [EXCEPTION]
Errno::EXXX: - 失敗した場合に発生します。
p Dir.children('.') #=> ["bar", "foo"][SEE_ALSO] Dir#children
[SEE_ALSO] Dir.each_child
[SEE_ALSO] Dir.entries
- [PARAM]
chroot(path) -> 0[permalink][rdoc][edit]-
ルートディレクトリを path に変更します。
スーパーユーザだけがルートディレクトリを変更できます。ルートディレクトリの変更に成功すれば 0 を返します。各プラットフォームのマニュアルの chroot の項も参照して下さい。
- [PARAM]
path: - ディレクトリのパスを文字列で指定します。
- [EXCEPTION]
Errno::EXXX: - 失敗した場合に発生します。
p Dir.glob("*") #=> ["file1", "file2] Dir.chroot("./") p Dir.glob("/*") #=> ["/file1", "/file2][SEE_ALSO] http://opengroup.org/onlinepubs/007908799/xsh/chroot.html
- [PARAM]
delete(path) -> 0[permalink][rdoc][edit]rmdir(path) -> 0unlink(path) -> 0-
ディレクトリを削除します。ディレクトリは空でなければいけません。ディレクトリの削除に成功すれば 0 を返します。
- [PARAM]
path: - ディレクトリのパスを文字列で指定します。
- [EXCEPTION]
Errno::EXXX: - 失敗した場合に発生します。
Dir.delete("/tmp/hoge-jbrYBh.tmp") - [PARAM]
each_child(path) {|file| ...} -> nilRuby 2.5.0 から[permalink][rdoc][edit]each_child(path, encoding: enc) {|file| ...} -> nileach_child(path) -> Enumeratoreach_child(path, encoding: enc) -> Enumerator-
ディレクトリ path の "." と ".." をのぞく各エントリを表す文字列を引数として、ブロックを評価します。
ブロックが与えられなかった場合、各エントリを文字列として保持する Enumerator オブジェクトを返します。
- [PARAM]
path: - ディレクトリのパスを文字列で指定します。
- [PARAM]
encoding: - ディレクトリのエンコーディングを文字列か Encoding オブジェクトで指定します。省略した場合はファイルシステムのエンコーディングと同じになります。
- [EXCEPTION]
Errno::EXXX: - 失敗した場合に発生します。
Dir.each_child('.'){|f| p f } #=> "bar" # "foo"[SEE_ALSO] Dir.foreach
[SEE_ALSO] Dir.children
[SEE_ALSO] Dir#each_child
- [PARAM]
empty?(path_name) -> boolRuby 2.4.0 から[permalink][rdoc][edit]-
path_name で与えられたディレクトリが空の場合に真を返します。ディレクトリでない場合や空でない場合に偽を返します。
例p Dir.empty?('.') #=> false p Dir.empty?(IO::NULL) #=> false require 'tmpdir' p Dir.mktmpdir { |dir| Dir.empty?(dir) } #=> true- [PARAM]
path_name: - 確認したいディレクトリ名。
- [PARAM]
entries(path) -> [String][permalink][rdoc][edit]entries(path, encoding: Encoding.find("filesystem")) -> [String]-
ディレクトリ path に含まれるファイルエントリ名の配列を返します。
- [PARAM]
path: - ディレクトリのパスを文字列で指定します。
- [PARAM]
encoding: - ディレクトリのエンコーディングを文字列か Encoding オブジェクトで指定します。省略した場合はファイルシステムのエンコーディングと同じになります。
- [EXCEPTION]
Errno::EXXX: - 失敗した場合に発生します。
p Dir.entries('.') #=> [".", "..", "bar", "foo"][SEE_ALSO] Dir.foreach
[SEE_ALSO] Dir.children
- [PARAM]
exist?(file_name) -> boolRuby 1.9.3 から[permalink][rdoc][edit]-
file_name で与えられたディレクトリが存在する場合に真を返します。そうでない場合は、偽を返します。
- [PARAM]
file_name: - 存在を確認したいディレクトリ名。
p Dir.exist?(".") # => true p File.directory?(".") # => true[SEE_ALSO] File.directory?
- [PARAM]
exists?(file_name) -> boolRuby 1.9.1 から Ruby 3.2 で削除[permalink][rdoc][edit]-
このメソッドは Ruby 2.1 から deprecated です。Dir.exist? を使用してください。
foreach(path) {|file| ...} -> nil[permalink][rdoc][edit]foreach(path, encoding: Encoding.find("filesystem")) {|file| ...} -> nilforeach(path) -> Enumeratorforeach(path, encoding: Encoding.find("filesystem")) -> Enumerator-
ディレクトリ path の各エントリを表す文字列を引数として、ブロックを評価します。
ブロックが与えられなかった場合、各エントリを文字列として保持する Enumerator オブジェクトを返します。
- [PARAM]
path: - ディレクトリのパスを文字列で指定します。
- [PARAM]
encoding: - ディレクトリのエンコーディングを文字列か Encoding オブジェクトで指定します。省略した場合はファイルシステムのエンコーディングと同じになります。
- [EXCEPTION]
Errno::EXXX: - 失敗した場合に発生します。
Dir.foreach('.'){|f| p f } #=> "." # ".." # "bar" # "foo"[SEE_ALSO] Dir.entries
[SEE_ALSO] Dir.each_child
- [PARAM]
getwd -> String[permalink][rdoc][edit]pwd -> String-
カレントディレクトリのフルパスを文字列で返します。
- [EXCEPTION]
Errno::EXXX: - カレントディレクトリの取得に失敗した場合に発生します(が、普通は失敗することはありません)。
p Dir.chdir("/tmp") #=> 0 p Dir.getwd #=> "/tmp" - [EXCEPTION]
home -> String | nilRuby 1.9.3 から[permalink][rdoc][edit]home(user) -> String | nil-
現在のユーザまたは指定されたユーザのホームディレクトリを返します。
Dir.home や Dir.home("root") は File.expand_path("~") や File.expand_path("~root") とほぼ同じです。
例p Dir.home # => "/home/vagrant" p Dir.home("root") # => "/root"[SEE_ALSO] File.expand_path
mkdir(path, mode = 0777) -> 0[permalink][rdoc][edit]-
path で指定された新しいディレクトリを作ります。パーミッションは mode で指定された値に umask をかけた値 (mode & ~umask) になります。 mkdir(2) も参照して下さい。ディレクトリの作成に成功すれば 0 を返します。
- [PARAM]
path: - ディレクトリのパスを文字列で指定します。
- [PARAM]
mode: - ディレクトリのモードを整数で与えます。
- [EXCEPTION]
Errno::EXXX: - ディレクトリの作成に失敗した場合に発生します。
p File.umask #=> 2 Dir.mkdir('t', 0666) p "%#o" % (07777 & File.stat('t').mode) #=> "0664"[SEE_ALSO] FileUtils.#makedirs
- [PARAM]
new(path) -> Dir[permalink][rdoc][edit]new(path, encoding: Encoding.find("filesystem")) -> Diropen(path) -> Diropen(path, encoding: Encoding.find("filesystem")) -> Diropen(path) {|dir| ...} -> objectopen(path, encoding: Encoding.find("filesystem")) {|dir| ...} -> object-
path に対するディレクトリストリームをオープンして返します。
ブロックを指定して呼び出した場合は、ディレクトリストリームを引数としてブロックを実行します。ブロックの実行が終了すると、ディレクトリは自動的にクローズされます。ブロックの実行結果を返します。
- [PARAM]
path: - ディレクトリのパスを文字列で指定します。
- [PARAM]
encoding: - ディレクトリのエンコーディングを文字列か Encoding オブジェクトで指定します。省略した場合はファイルシステムのエンコーディングと同じになります。
- [EXCEPTION]
Errno::EXXX: - オープンに失敗した場合に発生します。
例: Dir.openrequire '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 endrequire '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 - [PARAM]
インスタンスメソッド
children -> [String]Ruby 2.6.0 から[permalink][rdoc][edit]-
ディレクトリのファイルエントリ名のうち、 "." と ".." をのぞいた配列を返します。
- [EXCEPTION]
IOError: - 既に self が close している場合に発生します。
Dir.open('.'){|d| p d.children # => ["bar", "foo"] }[SEE_ALSO] Dir.children
- [EXCEPTION]
close -> nil[permalink][rdoc][edit]-
ディレクトリストリームをクローズします。クローズに成功すれば nil を返します。
例d = Dir.new(".") p d.close # => nil each {|item| ... } -> self[permalink][rdoc][edit]each -> Enumerator-
ディレクトリの各エントリを表す文字列を引数として、ブロックを評価します。
ブロックが与えられなかった場合、各エントリを文字列として保持する Enumerator オブジェクトを返します。
- [EXCEPTION]
IOError: - 既に自身が close している場合に発生します。
Dir.open('.').each{|f| p f } #=> "." # ".." # "bar" # "foo"[SEE_ALSO] Dir#each_child
- [EXCEPTION]
each_child {|item| ... } -> selfRuby 2.6.0 から[permalink][rdoc][edit]each_child -> Enumerator-
ディレクトリの "." と ".." をのぞく各エントリを表す文字列を引数として、ブロックを評価します。
ブロックが与えられなかった場合、各エントリを文字列として保持する Enumerator オブジェクトを返します。
- [EXCEPTION]
IOError: - 既に self が close している場合に発生します。
Dir.open('.').each_child{|f| p f } #=> "bar" # "foo"[SEE_ALSO] Dir#each
[SEE_ALSO] Dir.each_child
- [EXCEPTION]
fileno -> IntegerRuby 2.2.0 から[permalink][rdoc][edit]-
self に関連づけられたファイル記述子を表す整数を返します。
例p Dir.open("..") { |d| d.fileno } # => 8本メソッドでは POSIX 2008 で定義されている dirfd() 関数を使用します。
- [EXCEPTION]
NotImplementedError: - Windows などの dirfd() 関数が存在しないプラットフォームで発生します。
- [EXCEPTION]
IOError: - 既に自身が close している場合に発生します。
[SEE_ALSO] IO#fileno
- [EXCEPTION]
inspect -> String[permalink][rdoc][edit]-
self の情報を人間に読みやすい文字列にして返します。
例p Dir.open("/") { |d| d.inspect } # => "#<Dir:/>" path -> String[permalink][rdoc][edit]to_path -> StringRuby 1.9.3 から-
オープンしているディレクトリのパス名を文字列で返します。
例Dir.open("..") do |d| p d.path # => ".." p d.to_path # => ".." end pos -> Integer[permalink][rdoc][edit]tell -> Integer-
ディレクトリストリームの現在の位置を整数で返します。
- [EXCEPTION]
IOError: - 既に自身が close している場合に発生します。
Dir.open("/tmp") {|d| d.each {|f| p d.pos } } - [EXCEPTION]
pos=(pos)[permalink][rdoc][edit]seek(pos) -> self-
ディレクトリストリームの読み込み位置を pos に移動させます。 pos は Dir#tell で与えられた値でなければなりません。
- [PARAM]
pos: - 変更したい位置を整数で与えます。
- [EXCEPTION]
IOError: - 既に自身が close している場合に発生します。
Dir.open("testdir") do |d| p d.read # => "." i = d.tell # => 12 p d.read # => ".." p d.seek(i) # => #<Dir:0x401b3c40> p d.read # => ".." end - [PARAM]
read -> String | nil[permalink][rdoc][edit]-
ディレクトリストリームから次の要素を読み出して返します。最後の要素まで読み出していれば nil を返します。
- [EXCEPTION]
Errno::EXXX: - ディレクトリの読み出しに失敗した場合に発生します。
- [EXCEPTION]
IOError: - 既に自身が close している場合に発生します。
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 - [EXCEPTION]
rewind -> self[permalink][rdoc][edit]-
ディレクトリストリームの読み込み位置を先頭に移動させます。
- [EXCEPTION]
IOError: - 既に自身が close している場合に発生します。
Dir.open("testdir") do |d| p d.read # => "." p d.rewind # => #<Dir:0x401b3fb0> p d.read # => "." end - [EXCEPTION]
追加されるメソッド
mktmpdir(prefix_suffix = nil, tmpdir = nil) -> String[permalink][rdoc][edit] [added by tmpdir]mktmpdir(prefix_suffix = nil, tmpdir = nil) {|dir| ... } -> object[added by tmpdir]-
一時ディレクトリを作成します。
作成されたディレクトリのパーミッションは 0700 です。
ブロックが与えられた場合は、ブロックの評価が終わると作成された一時ディレクトリやその配下にあったファイルを FileUtils.#remove_entry を用いて削除し、ブロックの値をかえします。ブロックが与えられなかった場合は、作成した一時ディレクトリのパスを返します。この場合、このメソッドは作成した一時ディレクトリを削除しません。
- [PARAM]
prefix_suffix: - nil の場合は、'd' をデフォルトのプレフィクスとして使用します。サフィックスは付きません。文字列が与えられた場合は、その文字列をプレフィクスとして使用します。サフィックスは付きません。 2 要素の配列が与えられた場合は、一つ目の要素をプレフィクス、二つ目の要素をサフィックスとして使用します。
- [PARAM]
tmpdir: - nil の場合は Dir.tmpdir を使用します。そうでない場合は、そのディレクトリを使用します。
require 'tmpdir' puts Dir.tmpdir # 出力例: 動作環境により出力は異なります。 #=> /cygdrive/c/DOCUME~1/kouya/LOCALS~1/Temp Dir.mktmpdir{|dir| puts dir # 出力例: 一時ディレクトリ の名前の先頭に'd' をつける。 #=> /cygdrive/c/DOCUME~1/kouya/LOCALS~1/Temp/d20081011-4524-1m69psi # ^ } Dir.mktmpdir("foo"){|dir| puts dir # 出力例:一時ディレクトリ の名前の先頭に'foo' をつける。 #=> /cygdrive/c/DOCUME~1/kouya/LOCALS~1/Temp/foo20081011-4824-pjvhwx # ^^^ } Dir.mktmpdir(["foo", "bar"]){|dir| puts dir # 出力例: 一時ディレクトリの名前の先頭に'foo' 、最後に'bar'をつける。 #=> /cygdrive/c/DOCUME~1/kouya/LOCALS~1/Temp/foo20081011-5624-1hyxrqbbar # ^^^ ^^^ } Dir.mktmpdir(nil, "/var/tmp") {|dir| puts dir # 出力例: tmpdir の作成先が'/var/tmp'となる。 # さらに、一時ディレクトリ の名前の先頭に'd' をつける。 #=> /var/tmp/d20081011-5304-h6b13j } memory_dir = nil Dir.mktmpdir {|dir| memory_dir = dir File.open("#{dir}/foo", "w") { |fp| fp.puts "hogehoge" } } # ブロックを抜けたら、テンポラリディレクトリは消される。 p FileTest.directory?(memory_dir) #=> false dir = Dir.mktmpdir # ブロックを与えない場合は、ディレクトリは存在する。 begin File.open("#{dir}/foo", "w") { |fp| fp.puts "hogehoge" } ensure FileUtils.remove_entry_secure dir end p FileTest.directory?(dir) #=> false- [EXCEPTION]
ArgumentError: - tmpdirが全てのユーザから書き込み可能かつ、sticky ビットが立っていない場合に発生します。作成する一時ディレクトリを安全に削除できないためです。アプリケーションは一時ディレクトリを他のユーザから書き込める権限に変更すべきではありません。
- [PARAM]
tmpdir -> String[permalink][rdoc][edit] [added by tmpdir]-
テンポラリファイルを作成するのに使うディレクトリ(テンポラリディレクトリ)の絶対パスを文字列として返します。 $SAFE によって返す文字列は変わります。
# WindowsXPの場合 require "tmpdir" p Dir.tmpdir #=> "C:/DOCUME~1/taro3/LOCALS~1/Temp" $SAFE = 1 p Dir.tmpdir #=> "C:/WINDOWS/temp" # Linuxの場合 /tmp に加え、環境変数 ENV['TMPDIR'], ENV['TMP'], ENV['TEMP'], ENV['USERPROFILE']を参照します