ディレクトリとは
ディレクトリとは、ファイルを格納することができる場所のことです。
Rubyでは、DirクラスとFileUtilsモジュールがディレクトリを管理し、Fileクラスがファイルを扱います。
ダブルドット(..)はディレクトリの親ディレクトリを、シングルドット(.)はディレクトリそのものを指す。
Dirクラス
Dirクラスは、Rubyでファイルシステムのディレクトリ構造へのアクセスやその内容を提供するもので、フォルダの内容を一覧表示したり、適切なパス区切りでファイル名を生成したりする手段を提供します。
ディレクトリ使用例
ディレクトリを作成する
ディレクトリの作成は、Dirクラスのmkdir()メソッドで行います。
以下のコードで、ネストしていないディレクトリを作成することができます。mkdir()メソッドは、ディレクトリの作成に成功した場合、0を返します。
Dir.mkdir "ディレクトリの名前"
例)
a = Dir.mkdir "lotte"
print("#{a}")
# 出力結果
# 0
ディレクトリを確認する
exists()
Dir クラスの exists() メソッドは、ディレクトリが存在するかどうかを確認するために使用されます。
Dir.exist?"ディレクトリの名前"
例)
puts Dir.mkdir("lotte")
puts Dir.exists?("lotte")
# 出力結果
# 0
# true
empty?
Dirクラスのempty? メソッドは、ディレクトリが空かどうかをチェックするために使用されます。
Dir.empty?"ディレクトリの名前"
例)
puts Dir.mkdir("lotte")
puts Dir.empty?("lotte")
# 出力結果
# 0
# true
ディレクトリを操作する
Dirクラスは、Rubyのディレクトリ操作のために、
new(), pwd(), home(), path(), getwd(), chdir(), entries(), glob() などのメソッドを使用します。
new()
new()は、新しいディレクトリオブジェクトを作成するために使用されます。
obj=Dir.new("ディレクトリ名")
上記のコードでは、フォルダディレクトリはすでに存在しているはずです。
pwd()
pwd()メソッドは、カレントディレクトリを返します。
Dir.pwd
例)
Dir.mkdir("lotte")
puts Dir.pwd
# 出力結果
# 0
# /workspace
home()
Dir クラスの home() メソッドは、現在のユーザーのホームディレクトリを返すために使用されます。
Dir.home
例)
Dir.mkdir("lotte")
puts Dir.home
# 出力結果
# 0
# /workspace
以下のコードは、特定のユーザーのホームディレクトリを返すものです。
Dir.home('ユーザーの名前')
path()
Dir クラスの path() メソッドは、path パラメータを返すために使用されます。
d=Dir.new("ディレクトリ名")
d.path
例)
Dir.mkdir("lotte")
obj = Dir.new("lotte")
a = obj.path
print("#{a}")
# 出力結果
# lotte
getwd()
Dirクラスのgetwd()メソッドは、カレントディレクトリのパスを返すために使用されます。
Dir.getwd
例)
Dir.mkdir("lotte")
puts Dir.getwd
# 出力結果
# /workspace
chdir()
Dirクラスのchdir()メソッドは、カレントディレクトリを変更するために使用されます。
Dir.chdir("ディレクトリ名")
例)
Dir.mkdir("/workspace/lotte1")
Dir.mkdir("/workspace/lotte2")
puts Dir.pwd
Dir.chdir("lotte2")
puts Dir.pwd
# 出力結果
# /workspace
# /workspace/lotte2
entries()
Dir クラスの entries() メソッドは、ディレクトリ内に存在するすべてのファイルとフォルダーを配列で返すために使用されます。
Dir.entries("ディレクトリ")
例)
Dir.mkdir("lotte")
puts Dir.pwd
Dir.chdir("lotte")
puts Dir.pwd
Dir.mkdir("chiba1")
Dir.mkdir("chiba2")
Dir.mkdir("chiba3")
print("Entries:\n")
puts Dir.entries("C:/Users/Desktop/lotte")
# 出力結果
# C:/Users/Desktop
# C:/Users/Desktop/lotte
# Entries:
# .
# ..
# chiba1
# chiba2
# chiba3
glob()
Dirクラスのglob()メソッドは、特定のパターンに一致するファイルをすべて表示するために使用されます。
Dir.glob("パターン")
例)
Dir.mkdir("lotte")
Dir.chdir("lotte")
Dir.mkdir("abcde")
Dir.mkdir("deabc")
Dir.mkdir("program.rb")
Dir.mkdir("program2.rb")
print"\nカレントディレクトリの全てのファイル: \n"
puts Dir.glob("*")
print"\n'abc'を含む全てのファイル: \n"
puts Dir.glob("*abc*")
print"\n全てのRubyファイル\n"
puts Dir.glob("*.rb")
# 出力結果
# カレントディレクトリの全てのファイル:
# abcde
# deabc
# program.rb
# program2.rb
# 'abc'を含む全てのファイル:
# abcde
# deabc
# 全てのRubyファイル
# program.rb
# program2.rb
ディレクトリを削除する
Dir クラスには、Ruby ディレクトリを削除するための rmdir(), delete(), unlink() などのメソッドが用意されています。
Dir.delete "lotte"
Dir.rmdir "lotte"
Dir.unlink "lotte"
例)
Dir.mkdir("lotte")
puts Dir.exist?("lotte")
Dir.rmdir("lotte")
puts Dir.exist?("lotte")
# 出力結果
# true
# false
ネストしたディレクトリの作成
FileUtilsモジュールのmkdir_p()メソッドは、ディレクトリとそのすべての親ディレクトリを作成するために使用されます。
FileUtils.mkdir_p 'ディレクトリのパス'
例)
Dir.mkdir "parent_lotte"
print("Current Directory: ")
puts Dir.pwd
require "fileutils"
FileUtils.mkdir_p "parent_lotte/child_lotte/lotte"
Dir.chdir("/workspace/parent_lotte")
print("Current Directory: ")
puts Dir.pwd
puts Dir.exists?("child_lotte")
Dir.chdir("/workspace/parent_lotte/child_lotte")
print("Current Directory: ")
puts Dir.pwd
puts Dir.exists?("lotte")
# 出力結果
# Current Directory: /workspace
# Current Directory: /workspace/parent_lotte
# true
# Current Directory: /workspace/parent_lotte/child_lotte
# true
ファイルやフォルダーの移動
FileUtilsモジュールのmv()およびmove()メソッドは、
ファイルやフォルダをカレントディレクトリから移動先ディレクトリに移動するために使用されます。
FileUtils.mv("カレントディレクトリ", "移動先ディレクトリ")
例)
Dir.mkdir "lotte1"
Dir.mkdir "lotte2"
require "fileutils"
FileUtils.mv( "lotte1", "lotte2")
Dir.chdir("lotte2")
puts Dir.exists?("lotte1")
# 出力結果
# true
あるディレクトリから別のディレクトリにファイルをコピーする
FileUtilsモジュールのcp()メソッドは、
カレントディレクトリから移動先ディレクトリにファイルをコピーするために使用されます。
FileUtils.cp("カレントディレクトリ", "移動先ディレクトリ")
例)
lotte1 と lotte2 の2つのディレクトリがすでに作成されていて、lotte2 には test.txt が入っているとします。
require "fileutils"
FileUtils.cp( "lotte2/test.txt", "lotte1")
Dir.chdir("lotte1")
puts File.exist?("test.txt")
# 出力結果
# true