2012-10-25 71 views
5

Dưới đây là hai cách để sử dụng glob đệ quy liệt kê các thư mục:Sự khác biệt giữa "**/* /" và "** /"?

Dir.glob("**/*/")

Dir.glob("**/")

Sản lượng dường như là giống nhau, ít nhất là cho một cây con nhỏ. Có một sự khác biệt giữa hai lệnh mà tôi đang bỏ lỡ không?

Trả lời

2

** khớp với 0 hoặc nhiều thư mục. Bằng cách đặt một * ở cuối bạn loại bỏ các thư mục trong thư mục gốc, về cơ bản làm cho nó 1 trở lên:

a = Dir.glob('/tmp/**/*/').sort  
b = Dir.glob('/tmp/**/').sort.size 
b.size => 19 
a.size => 18 
b - a => ["/tmp/"] 

Nếu không có một con đường liên tục dẫn đầu, mặc dù nó không giống như có sự khác biệt như 0 trận đấu chiều dài aren không thú vị và không được đưa vào kết quả.

0

Trong trường hợp đó, không có.

Nhưng, có những trường hợp loại phân biệt đó có thể là quan trọng. Nếu các mẫu thay vì **/***/*/* để đệ quy khớp tệp chứ không phải thư mục, thư mục đầu tiên sẽ bao gồm tệp trong thư mục hiện tại trong khi thư mục thứ hai chỉ liệt kê các tệp ít nhất một cấp từ thư mục hiện tại kể từ /*/ ở giữa phải phù hợp với một cái gì đó.

Các vấn đề liên quan