2009-03-27 28 views
11

Estoy trabajando en un script ahora que tiene que ejecutar cada script de ruby ​​en un directorio y sus subcarpetas.Ejecutando archivos en un directorio de forma recursiva usando ruby ​​

p. Ej.

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

Como el servidor es un servidor de Windows normalmente me gustaría utilizar un archivo por lotes, pero el dev cabeza insiste en que todo debe ser hecho en el rubí como algunos miembros tienen Macs y no pueden entender por lotes de archivos de Windows.

Como la pregunta puede haber cedido, mi conocimiento de Ruby es muy básico.

Respuesta

28

depende de lo que entendemos por "correr". A sólo hay que ejecutar el código que se encuentra en cada secuencia de comandos dentro del mismo proceso de rubí, esto va a hacer el truco:

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

Pero desea ejecutar cada secuencia de comandos en su propio proceso de rubí, a continuación, intente esto:

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

Simplemente ponga cualquiera de estos en el contenido de run-all.rb y ejecute ruby run-all.rb desde la línea de comando.

1

Algo como esto probablemente debería funcionar:

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 
Cuestiones relacionadas