2009-03-27 11 views
11

私は現在、ディレクトリとそのサブフォルダ内の各rubyスクリプトを実行する必要があるスクリプトを作成中です。ruby​​を使ってディレクトリ内のファイルを再帰的に実行する

サーバーとして

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

私は通常、バッチファイルを使用するWindowsサーバであるが、ヘッドdevが一部のメンバーは、Macを持っていると、Windowsのバッチファイルを理解していない可能性としてすべてがRubyで行われなければならないと主張します。

問題が分かったので、私のRubyの知識は非常に基本的なものです。このような

答えて

28

は、あなたが "実行" によって何を意味するかによって異なります。ちょうど同じルビー・プロセス内の各スクリプトにあるコードを実行するには、これはトリックを行います:

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

しかし、あなたはそれ自身のルビープロセスで各スクリプトを実行したいことは、この試してみてください。

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

run-all.rbの内容にこれらのいずれかを入れて、コマンドラインからruby run-all.rbを実行します。

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 
関連する問題