Bạn có thể sắp xếp để tìm tất cả các tệp, xóa tên tệp, để lại cho bạn một dòng chỉ chứa tên thư mục cho mỗi tệp, sau đó đếm số lần mỗi thư mục xuất hiện:
find . -type f |
sed 's%/[^/]*$%%' |
sort |
uniq -c
Bí quyết duy nhất trong trường hợp này là nếu bạn có bất kỳ tên tệp hoặc tên thư mục nào chứa ký tự dòng mới, điều này khá khó xảy ra. Nếu bạn thực sự phải lo lắng về dòng mới trong tên tệp hoặc tên thư mục, tôi khuyên bạn nên tìm chúng và sửa chúng để chúng không chứa dòng mới (và lặng lẽ thuyết phục bên có lỗi về lỗi của cách làm của họ).
Nếu bạn quan tâm đến số lượng tệp trong mỗi thư mục con của thư mục hiện tại, đếm bất kỳ tệp nào trong bất kỳ thư mục con nào cùng với các tệp trong thư mục con ngay lập tức, thì tôi sẽ điều chỉnh sed
lệnh để chỉ in thư mục cấp cao nhất:
find . -type f |
sed -e 's%^\(\./[^/]*/\).*$%\1%' -e 's%^\.\/[^/]*$%./%' |
sort |
uniq -c
Mẫu đầu tiên ghi lại phần bắt đầu của tên, dấu chấm, dấu gạch chéo, tên cho đến dấu gạch chéo tiếp theo và dấu gạch chéo, và thay thế dòng chỉ bằng phần đầu tiên, do đó:
./dir1/dir2/file1
được thay thế bởi
./dir1/
Thay thế thứ hai nắm bắt các tệp trực tiếp trong thư mục hiện tại; chúng không có dấu gạch chéo ở cuối và chúng được thay thế bằng ./
. Việc sắp xếp và đếm sau đó chỉ hoạt động dựa trên số lượng tên.
./
?