ruby - ライブラリ - Dir クラス

 
1. 概要
2. entries ディレクトリ内のファイルを収集する
3. chdir カレントディレクトリ変更
4. glob 再帰呼び出し可能な収集

1. 概要

 Dir クラスはディレクトリ操作を行います。  本項は、下記のサイトを参考にさせていただきました。
class Dir (Ruby 2.5.0)」
「Ruby - Ruby ディレクトリのファイルを全て出力したい|teratail

2. entries ディレクトリ内のファイルを収集する

 entries(ディレクトリ) というメソッドを使用すると指定したディレクトリ内のファイルを配列として収集します。
entries = Dir.entries(File.dirname(File.expand_path(__FILE__)))

puts("entries=[#{entries}]")

 というソースを書いて実行すると下記の結果が得られます(実際にソースがあるかは確認しています)。
entries=[[".", "..", "entries.rb", "glob.rb", "glob2.rb", "chdir.rb", "glob2.ini"]]

3. chdir カレントディレクトリ変更

 unix コマンドの cd と同じ動作をします。
Dir.chdir(File.dirname(File.expand_path(__FILE__)))
entries = Dir.entries('.')
puts("entries=[#{entries}]")

 というソースを書いて実行すると下記の結果が得られます(実際にソースがあるかは確認しています)。
entries=[[".", "..", "entries.rb", "glob.rb", "glob2.rb", "chdir.rb", "glob2.ini"]]
 前項のソースと比べると動作がわかりやすいかと思います。

4. glob 再帰呼び出し可能な収集

 glob というメソッドはワイルドカードを使用してディレクトリ内のファイルを収集します。  ワイルドカードをうまく使用することによって、再帰呼び出しを一発で行うことができるようです。  「tree」コマンドで見ると以下のようになっている状況で(長いので途中以降省略しています。)
|-- 02.html
|-- 03OS
|   |-- 03.1.html
|   |-- 03.2.html
|   `-- index.html
|-- 04.html
|-- 05.html
|-- 06.html
|-- 07ports
Dir.chdir(parameter[:directory])
join = File.join('**', '*.html')
glob = Dir.glob(join)
puts("glob=[#{glob}]")

 というソースを書いて実行すると下記の結果が得られます(ディレクトリ名を指定している前半部分はセキュリティ上の問題で省略)。
glob=[["02.html", "04.html", "05.html", "06.html", "index.html", "03OS/03.1.html", "03OS/03.2.html", "03OS/index.html", "07ports/07.01.html", "07ports/07.02.html", "07ports/07.03.html", "07ports/07.04.html", "07ports/index.html", "08bind/01.html", "08bind/02.html", "08bind/index.html", "09qmail/09.01.html", "09qmail/09.02.html", "09qmail/09.03.html", "09qmail/09.04.html", "09qmail/index.html", "10Web/10.01.html", "10Web/10.02.html", "10Web/10.03.html", "10Web/index.html", "11FTP/11.01.html", "11FTP/11.02.html", "11FTP/11.03.html", "11FTP/index.html", "12jman/index.html", "13newsyslog/index.html", "14ntp/index.html", "15analog/index.html", "16ezmlm/16.01.html", "16ezmlm/16.02.html", "16ezmlm/16.03.html", "16ezmlm/index.html", "17pgsql/17.01.html", "17pgsql/17.02.html", "17pgsql/17.03.html", "17pgsql/17.04.html", "17pgsql/index.html", "18svn/index.html", "21sshd/index.html"]]