Как получить список всех файлов всех файлов, находящихся в директории и в поддиректориях (рекурсивно)?

find - это то, что нужно. Пример ниже заполняет массив dirs директориями, а массив files - именами файлов данной директории.

 require 'find'
 dirs = []
 files = []
 Find.find("directory") do |f|
   if FileTest.directory?(f)
     dirs.push(f)
   else
     files.push(f)
    end
  end

Можно также использовать нотацию ** в Dir[], то есть следующий код:

  p Dir['**/*.rb']

напечатает имена всех Ruby файлов в текущей директории и глубже, во вложенных директориях.