2009-03-27 10 views
11

Je travaille actuellement sur un script qui doit exécuter chaque script ruby ​​dans un répertoire et ses sous-dossiers.Exécution récursive des fichiers dans un répertoire utilisant ruby ​​

par exemple.

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

Comme le serveur est un serveur Windows je normalement utiliser un fichier de commandes, mais la tête dev insiste tout doit être fait en Ruby que certains membres ont des Mac et de Windows ne peuvent pas comprendre des fichiers batch. Comme la question peut avoir donné, ma connaissance de Ruby est très basique.

Répondre

28

Cela dépend ce que vous entendez par "run". Pour exécuter tout le code qui est dans chaque script dans le même processus rubis, cela fera l'affaire:

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

Mais ce que vous voulez exécuter chaque script dans son propre processus de rubis, essayez ceci:

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

Il suffit de mettre l'un de ces éléments dans le contenu de run-all.rb et l'exécution ruby run-all.rb former la ligne de commande.

1

Quelque chose comme cela devrait probablement travailler:

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 
Questions connexes