Dir クラスの使用方法についてまとめました。
Kernel.Dir
Dirクラスのメソッドは以下の通りです。
メソッド | 引数 | 処理内容 |
---|---|---|
Dir.pwd | - | カレントディレクトリのフルパスを返す。他 getwd メソッドも同じ |
Dir.home | [user] | 現在のユーザーまたは指定されたユーザーのホームディレクトリを返す |
Dir.chdir | [path, block] | カレントディレクトリをpathに変更 |
Dir.chroot | path | ルートディレクトリをpathに変更 |
Dir.mkdir | path, mode | pathで指定されたディレクトリを作成。modeでパーミッション指定 |
Dir.remdir | path | ディレクトリを削除。delete, unlink も同じ |
Dir.exist? | path | pathで与えられたディレクトリが存在する場合はtrueを返す。同様の exists? は deprecated |
Dir.foreach | [path, block] | pathの各エントリを表す文字列を引数としてブロックを評価。Dir#each も同じ |
Dir.entries | path | pathに含まれるディレクトリ、ファイル名の配列を返す。Dir#entriesも有 |
Dir.glob | pattern, flag | パターンにマッチしたディレクトリ、ファイルを配列で返す。Dir.[] も同じ |
Dir.open | path, [block] | pathのディレクトリを開いてインスタンスを返す。new も同じ |
Dir#close | - | 開いたディレクトリストリームを閉じる。 |
Dir#path | - | 開いたディレクトリのパスを返す。to_path も同じ |
Dir#pos | - | ディレクトリストリームの現在の位置を返す。tell も同じ |
Dir#read | - | ディレクトリストリームから次の要素を読み出して返す |
Dir#rewind | - | ディレクトリストリームの読込み位置を先頭に移動 |
Dir クラスのインスタンスメソッドを使用するにはDir.open
またはDir.new
を使用します。Dir のインスタンスを返しますが、ブロックを受け取ることもできます。
Dir.open('/home') do |dir| dir.each do |v| puts v end end
Dir.chdir
はブロックを受け取ることができるため影響を限定することができます。
Dir.chdir("/tmp") do p Dir.pwd #=> "/private/tmp" end Dir.pwd => "/Users/tasukujp"
Dir クラスのメソッドで渡すパスにチルダ (~) は指定できません。そのため HOME ディレクトリを指定したい、またはチルダを使いたい場合は次のような方法があります。
Dir.chdir("#{ENV['HOME']}/tmp") => 0 File.expand_path('~/tmp') => "/Users/tasukujp/tmp" Pathname.new('~/tmp').expand_path.to_s => "/Users/tasukujp/tmp"