Dir[patten] や Dir.glob(patten) を使うと、ワイルドカードでファイルを検索して列挙することができます。
検索パターンの中では *、?、[]、{} などを使用できます。
以下の例では、カレントディレクトリ以下の html ファイル (*.html) を検索しています。
Dir.glob('**/*.html') do |item|
puts item
end
もちろん、指定したディレクトリを起点にして検索することもできます。 下記の例では、コマンドライン引数で指定したディレクトリを起点にして html ファイルを再帰的に検索します。
path = ARGV[0] ? ARGV[0] : '.'
Dir.glob("#{path}/**/*.html") do |item|
puts item
end
複数のパターンで OR 検索したい場合は、それぞれのパターンを \0 で区切って指定します。
下記の例では、カレントディレクト以下の cpp ファイルと h ファイルを検索します。
Dir.glob("**/*.cpp\0**/*.h")
大量のファイルを含むディレクトリから、File.glob を使用してファイルを検索しようとすると、レスポンスが帰ってくるまでに非常に時間がかかります。
そのような場合は、Dir.foreach などを使用して自力で再帰検索することを検討してください。