Liệt kê các thư mục lồng nhau sâu trước.
find . -depth -type d -exec rmdir {} \; 2>/dev/null
(Lưu ý rằng chuyển hướng áp dụng cho findtoàn bộ lệnh, không chỉ cho rmdir. Chuyển hướng chỉ để rmdirgây ra sự chậm lại đáng kể vì bạn cần phải gọi một lớp vỏ trung gian.)
Bạn có thể tránh chạy rmdirtrên các thư mục không trống bằng cách chuyển -emptyvị ngữ cần tìm. GNU find kiểm tra thư mục khi nó sắp chạy lệnh, vì vậy các thư mục vừa bị xóa sẽ được chọn.
find . -depth -type d -empty -exec rmdir {} \;
Một cách khác để tăng tốc sẽ là nhóm các rmdiryêu cầu. Cả hai đều có khả năng nhanh hơn đáng kể so với bản gốc, đặc biệt là dưới Cygwin. Tôi không mong đợi nhiều sự khác biệt giữa hai điều này.
find . -depth -type d -print0 | xargs -0 rmdir 2>/dev/null
find . -depth -type d -exec rmdir {} + 2>/dev/null
Phương pháp nào nhanh hơn phụ thuộc vào số lượng thư mục không trống của bạn. Bạn không thể kết hợp -emptyvới các phương pháp để nhóm các yêu cầu, bởi vì sau đó các thư mục chỉ chứa các thư mục trống sẽ không trống theo thời gian findnhìn vào chúng.
Một phương pháp khác là chạy nhiều lượt. Việc này có nhanh hơn hay không phụ thuộc vào rất nhiều thứ, bao gồm cả việc phân cấp toàn bộ thư mục có thể duy trì trong bộ đệm của đĩa giữa các findlần chạy hay không.
while [ -n "$(find . -depth -type d -empty -print -exec rmdir {} +)" ]; do :; done
Ngoài ra, sử dụng zsh. Vòng loại toàn cầu F khớp với các thư mục không trống, do đó /^Fkhớp với các thư mục trống. Các thư mục chỉ chứa các thư mục trống không thể được so khớp dễ dàng.
while rmdir **/*(/N^F); do :; done
(Điều này chấm dứt khi rmdirnhận được một dòng lệnh trống.)