Запуск файлов в каталоге рекурсивно с использованием ruby - PullRequest
11 голосов
/ 27 марта 2009

Я сейчас работаю над сценарием, который должен запускать каждый сценарий ruby ​​в каталоге и его подпапках.

например.

run-all.rb
- scripts
  - folder1
    - script1.rb
    - script2.rb
  - folder2
    - script3.rb
    - script4.rb

Поскольку сервер является сервером Windows, я обычно использовал бы пакетный файл, но главный разработчик настаивает, что все должно быть сделано в ruby, так как некоторые участники имеют Mac и могут не понимать пакетные файлы Windows.

Поскольку вопрос, возможно, исчез, мои знания Ruby очень просты.

Ответы [ 2 ]

28 голосов
/ 27 марта 2009

Зависит от того, что вы подразумеваете под «бегом». Чтобы просто выполнить код, который находится в каждом сценарии в одном и том же процессе ruby, это поможет:

Dir["scripts/**/*.rb"].each{|s| load s }

Но если вы хотите запустить каждый скрипт в своем собственном процессе ruby, попробуйте следующее:

Dir["scripts/**/*.rb"].each{|s| puts `ruby #{s}` }

Просто поместите любой из них в содержимое run-all.rb, и выполнение ruby run-all.rb формирует командную строку.

1 голос
/ 27 марта 2009

Что-то вроде этого должно работать:

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
...