Принятый ответ не работает: когда он пытается сначала преобразовать каталог, а затем файл в этом каталоге.
Вот код, который работает:
Dir.glob("./**/*").sort{|x| x.size}.each do |name|
x = name.split('/')
newname = (x[0..-2] + [x[-1].downcase]).join('/')
File.rename(name, newname)
end
(сортирует список по длине, поэтому директория будет преобразована после файла в нем)