Câu trả lời:
find . -type f -name '*.*' -exec sh -c 'echo ${0##*.}' {} \; | sort | uniq -c | sort -nr
Việc echo ${0##*.}cung cấp cho bạn phần mở rộng của tập tin. Chúng tôi dẫn đầu ra sortvà sau đó đếm các dòng duy nhất với uniq.
Một số bổ sung:
uniqkhông được sắp xếp theo số lần xuất hiện, bạn sẽ phải chuyển một lần nữa thành một loại số ( -nr) nếu bạn muốn nó được sắp xếp.-maxdepth 1vào findlệnh của bạn .awk '{print $2, $1}'để hiển thị số lượng sau khi mở rộng.-name '*.*'tùy chọn hạn chế findcác tập tin với phần mở rộng chỉ. Nếu bạn bỏ qua phần này, bạn sẽ kết thúc với số lượng 1 cho mỗi tệp, vì vậy điều này có thể không lý tưởng.
shquá trình bổ sung mất thêm một chút thời gian thực hiện, nên việc lọc kết quả findsẽ nhanh hơn một chút, tôi đoán vậy.