Ruby フォルダ内のファイルを全て表示する

Ruby フォルダ内のファイルを全て表示する

Rubyで、フォルダ内のファイルを全て表示するサンプルコードを記述してます。rubyのバージョンは2.7.2を使用してます。

環境

  • OS windows10 pro 64bit
  • ruby 2.7.2p137

Dir.foreach使用

Dir.foreachを使用すれば、フォルダ内のファイルを全て表示することが可能です。

コードと同じ階層にあるフォルダの内容

Dir.foreach使い方

Dir.foreach(".") do |i|
  p i
end

# "."
# ".."
# "b.rb"
# "foo.txt"
# "hoge"
# "hoge.txt"
# "sample.rb"

カレントフォルダ「.」や親フォルダである「..」を表示しないようにする場合は、条件式をdo内に使用します。

Dir.foreach(".") do |i|
  next if i == "." or i == ".."
  p i
end

# "b.rb"
# "foo.txt"
# "hoge"
# "hoge.txt"
# "sample.rb"

each_childを使用しても「.」と「..」は除外してくれます。

Dir.each_child(".").each do |i|
  p i
end

# "b.rb"
# "foo.txt"
# "hoge"
# "hoge.txt"
# "sample.rb"

Dir.open使用

Dir.openを使用して、取得することも可能です。

Dir.open(".").each do |i|
  p i
end

# "."
# ".."
# "b.rb"
# "foo.txt"
# "hoge"
# "hoge.txt"
# "sample.rb"

Dir.glob使用

globで「ワイルドカード(*)」を使用して、取得することも可能です。

Dir.glob("*").each do |i|
  p i
end

# "b.rb"
# "foo.txt"
# "hoge"
# "hoge.txt"
# "sample.rb"

パフォーマンスは、glob以外は、ほぼ同じです。

【参考】「.」と「..」を除外して取得したコードを10万回実行した結果

                 user     system      total        real
#foreach     2.875000  14.234000  17.109000 ( 17.167680)
#each_child  2.406000  14.782000  17.188000 ( 17.214891)
#open        2.735000  14.328000  17.063000 ( 17.060199)
#glob        4.078000  16.609000  20.687000 ( 20.712945)

Dir.entries使用

Dir.entriesを使用すると、配列で取得することが可能です。

p Dir.entries(".")

# [".", "..", "b.rb", "foo.txt", "hoge", "hoge.txt", "sample.rb"]

Dir.children使用

Dir.childrenを使用すると、カレントフォルダ「.」や親フォルダである「..」を取得せずに配列化してくれます。

p Dir.children(".")

# ["b.rb", "foo.txt", "hoge", "hoge.txt", "sample.rb"]