2009-03-27 5 views
11

Ich arbeite gerade an einem Skript, das jedes Ruby-Skript in einem Verzeichnis und seinen Unterordnern ausführen muss.Ausführen von Dateien in einem Verzeichnis rekursiv mit Ruby

z.B.

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

Als Server ist ein Windows-Server ich normalerweise eine Batch-Datei, aber der Kopf verwenden würde dev besteht darauf, alles in Ruby getan werden muss, da einige Mitglieder haben Mac- und Windows-Batch-Dateien können nicht verstehen.

Wie die Frage vielleicht verraten haben, ist mein Wissen über Ruby sehr einfach.

Antwort

28

Hängt was Sie mit "run" bedeuten. Um nur den Code auszuführen, die innerhalb des gleichen Ruby-Prozess in jedem Skript, wird dies den Trick:

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

Aber es wollen Sie jedes Skript ausgeführt werden soll in einem eigenen Ruby-Prozess, dann versuchen Sie dies:

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

Legen Sie einfach eine dieser beiden in den Inhalt von run-all.rb und den Lauf ruby run-all.rb Form der Befehlszeile.

1

So etwas sollte wahrscheinlich funktionieren:

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