使用ruby以递归方式在目录中运行文件

时间:2009-03-27 12:06:54

标签: ruby directory subdirectory

我正在编写脚本,它必须在目录及其子文件夹中运行每个ruby脚本。

e.g。

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

由于服务器是Windows服务器,我通常会使用批处理文件,但是头部开发人员坚持认为一切都必须在ruby中完成,因为有些成员有Mac并且可能不了解Windows批处理文件。

由于问题可能已经解决,我对Ruby的了解非常基础。

2 个答案:

答案 0 :(得分:28)

取决于“跑”的意思。要在同一个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 :(得分:1)

这样的事情应该可行:

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