Grrr, bình luận cần 50 rep. Vì vậy, câu trả lời này thực sự là một nhận xét về câu trả lời của chris.
Vì người hỏi có thể không quan tâm đến tất cả các thư mục, chỉ những thư mục tồi nhất, nên việc sử dụng sắp xếp có thể rất tốn kém.
find . -type d |
while
read line
do
echo "$(ls "$line" | wc -l) $line"
done |
perl -a -ne'next unless $F[0]>=$max; print; $max=$F[0]' | less
Phiên bản này không hoàn chỉnh như phiên bản của bạn, nhưng đây là dòng in nếu chúng lớn hơn mức tối đa trước đó, giúp giảm đáng kể lượng nhiễu được in ra và tiết kiệm chi phí sắp xếp.
Nhược điểm của việc này là nếu bạn có 2 thư mục rất lớn và lần đầu tiên xảy ra có thêm 1 nút inode so với thứ 2, bạn sẽ không bao giờ thấy thư mục thứ 2.
Một giải pháp hoàn chỉnh hơn sẽ là viết một tập lệnh perl thông minh hơn để theo dõi 10 giá trị hàng đầu được nhìn thấy và in chúng ra ở cuối. Nhưng đó là quá dài cho một câu trả lời máy chủ nhanh chóng.
Ngoài ra, một số tập lệnh perl thông minh hơn giữa chừng sẽ cho phép bạn bỏ qua vòng lặp while - trên hầu hết các nền tảng, chúng tôi sắp xếp kết quả và điều đó cũng có thể rất tốn kém cho các thư mục lớn. Sắp xếp ls là không cần thiết ở đây, vì tất cả những gì chúng ta quan tâm là số lượng.