2009-05-02 5 views
22

Tôi có một thư mục chứa nhiều thư mục con. Tôi muốn liệt kê chỉ những thư mục con chứa ít nhất một tệp. Làm thế nào tôi có thể làm điều đó?Làm thế nào để liệt kê các thư mục con không trống trên Linux?

+0

Bạn có muốn chỉ các thư mục là thư mục con ngay lập tức trong thư mục của bạn không, hoặc * all * subdirectories no vấn đề lồng nhau sâu sắc như thế nào? – Naaff

+0

nếu thư mục con chứa các thư mục con phụ khác nhưng không có tệp nào, tôi không muốn nó được liệt kê – Jaelebi

Trả lời

39
find . -mindepth 1 -maxdepth 1 -not -empty -type d 

sẽ cung cấp cho bạn tất cả các thư mục rỗng. Nếu bạn muốn loại trừ các thư mục chỉ chứa các thư mục khác (nhưng không có tệp nào), một trong các câu trả lời khác có thể tốt hơn ...

+0

Tùy chọn -mindepth và -maxdepth hạn chế tùy chọn này chỉ với các thư mục con ngay lập tức. Điều chỉnh những điều này để ảnh hưởng đến kết quả cấp được trả về. Rời khỏi họ sẽ tìm thấy tất cả các thư mục con ở mọi cấp độ. – Naaff

+0

và nhớ rằng -không phải là công cụ GNU. Để được di động, sử dụng! thay vì-không (thực sự, tôi không thấy lý do tại sao bạn sẽ không chỉ luôn luôn sử dụng! thay vì-không, nhìn thấy như-không cung cấp cho bạn không có lợi thế nào) – lhunath

+0

Bởi vì! có vẻ như nó phải là một metacharacter vỏ và tôi không bao giờ có thể nhớ liệu tôi có phải trích dẫn nó hay không ;-) nhưng bạn là đúng về nó được di động hơn. (Tôi đoán vì câu trả lời này đã được chấp nhận, cú pháp GNU cụ thể hoạt động cho OP) –

3

Làm thế nào về:

find /nominated/directory -type f | 
sed 's%/[^/]*$%% | 
sort -u 

Tìm file - tên tập tin thả phần - loại độc đáo.

Nó sẽ không liệt kê các thư mục con chỉ chứa các thư mục con phụ khác.

5
find . -type f -print0 | xargs -0 -n 1 dirname | sort -u 
+0

Cú pháp ngắn hơn một chút cho cùng một điều: tìm. -type f -exec dirname {} \; | sắp xếp -u –

+0

Rất tiếc. Một trích dẫn duy nhất chưa từng có đã gây ra chấm dứt sớm. Hoàn toàn là lỗi của tôi. –