Nhìn vào các ví dụ từ kch, dB. và Vishnu ở trên, tôi đã đặt cùng một lớp lót mà tôi nghĩ là một giải pháp thanh lịch hơn:
Dir['**/'].reverse_each { |d| Dir.rmdir d if Dir.entries(d).size == 2 }
tôi sử dụng '**/'
thay vì '/**/*'
cho glob, mà chỉ trả về thư mục, vì vậy tôi không có để kiểm tra xem đó có phải là thư mục sau này hay không. Tôi đang sử dụng reverse_each
thay vì sort.reverse.each
vì nó ngắn hơn và được cho là hiệu quả hơn, theo điều này post. Tôi thích Dir.entries(d).size == 2
đến (Dir.entries(d) - %w[ . .. ]).empty?
vì dễ đọc và dễ hiểu hơn, mặc dù (Dir.entries(d) - %w[ . .. ]).empty?
có thể hoạt động tốt hơn nếu bạn phải chạy tập lệnh trên Windows.
Tôi đã thử nghiệm điều này khá một chút trên Mac OS X và nó hoạt động tốt, ngay cả với thư mục trống đệ quy.
suy nghĩ đầu tiên: hệ thống "tìm. -type d | xargs rmdir -p 2>/dev/null" – kch
Chỉ cần lưu ý, tôi không muốn thực hiện thao tác này trong một lần chụp từ dòng lệnh. Nó sẽ được trong một kịch bản ruby. Những gì bạn có ở trên là một phiên bản dòng cmd không? –
tốt, đó là một lệnh shell, có, nhưng được gọi từ bên trong ruby bằng cách sử dụng 'Kernel.system';) – kch