【Ruby】Rubyのディレクトリについて詳しく解説します

Ruby

ディレクトリとは

ディレクトリとは、ファイルを格納することができる場所のことです。

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
タイトルとURLをコピーしました