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 sort
và sau đó đếm các dòng duy nhất với uniq
.
Một số bổ sung:
uniq
khô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 1
vào find
lệ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ế find
cá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.
sh
quá 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ả find
sẽ nhanh hơn một chút, tôi đoán vậy.