2009-03-27 36 views
11

Tôi đang làm việc trên tập lệnh ngay bây giờ để chạy từng tập lệnh ruby ​​trong một thư mục và các thư mục con của nó.Chạy các tệp trong thư mục theo cách đệ quy bằng cách sử dụng ruby ​​

ví dụ:

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

Vì máy chủ là máy chủ Windows, tôi thường sử dụng tệp lô nhưng đầu dev khẳng định mọi thứ phải được thực hiện bằng một số thành viên có máy Mac và có thể không hiểu tệp Windows Batch.

Như câu hỏi có thể đã cho đi, kiến ​​thức về Ruby của tôi rất cơ bản.

Trả lời

28

Phụ thuộc những gì bạn có nghĩa là bằng cách "chạy". Để chỉ thực thi mã đó là trong mỗi kịch bản trong quá trình ruby ​​cùng, điều này sẽ làm các trick:

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

Nhưng bạn muốn chạy mỗi kịch bản trong quá trình ruby ​​riêng của nó, sau đó thử này:

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

Chỉ cần đặt một trong hai nội dung này trong nội dung của run-all.rb và chạy biểu mẫu dòng ruby run-all.rb.

1

Something như thế này có lẽ nên làm việc:

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 
Các vấn đề liên quan