Рекурсивный запуск файлов в каталоге с использованием Ruby
-
22-08-2019 - |
Вопрос
Сейчас я работаю над сценарием, который должен запускать каждый Ruby-скрипт в каталоге и его подпапках.
например
run-all.rb
- scripts
- folder1
- script1.rb
- script2.rb
- folder2
- script3.rb
- script4.rb
Поскольку сервер является сервером Windows, я обычно использую пакетный файл, но главный разработчик настаивает, что все должно быть сделано в Ruby, поскольку у некоторых участников есть Mac, и они могут не понимать пакетные файлы Windows.
Как видно из вопроса, мои знания Ruby очень базовые.
Решение
Зависит от того, что вы подразумеваете под словом «бежать».Чтобы просто выполнить код, который есть в каждом скрипте в одном и том же Ruby-процессе, этого достаточно:
Dir["scripts/**/*.rb"].each{|s| load s }
Но если вы хотите запустить каждый скрипт в отдельном Ruby-процессе, попробуйте следующее:
Dir["scripts/**/*.rb"].each{|s| puts `ruby #{s}` }
Просто поместите любой из них в содержимое run-all.rb
и бег ruby run-all.rb
сформировать командную строку.
Другие советы
Вероятно, что-то вроде этого должно сработать:
def process_directory(basedir)
puts basedir
Find.find(basedir.chomp) do |path|
if FileTest.directory?(path)
if File.basename(path)[0] == ?.
Find.prune # Don't look any further into this directory.
else
next
end
else
puts path
end
end