Anda dapat mengatur untuk menemukan semua file, menghapus nama file, meninggalkan baris yang hanya berisi nama direktori untuk setiap file, dan kemudian menghitung berapa kali setiap direktori muncul:
find . -type f |
sed 's%/[^/]*$%%' |
sort |
uniq -c
Satu-satunya gotcha dalam hal ini adalah jika Anda memiliki nama file atau nama direktori yang berisi karakter baris baru, yang sangat tidak mungkin. Jika Anda benar-benar harus khawatir tentang baris baru dalam nama file atau nama direktori, saya sarankan Anda menemukannya, dan memperbaikinya sehingga tidak mengandung baris baru (dan diam-diam membujuk pihak yang bersalah atas kesalahan cara mereka).
Jika Anda tertarik dengan jumlah file di setiap sub-direktori dari direktori saat ini, menghitung file apa pun di sub-direktori apa pun bersama dengan file di sub-direktori langsung, maka saya akan menyesuaikan sedperintah untuk hanya mencetak direktori tingkat atas:
find . -type f |
sed -e 's%^\(\./[^/]*/\).*$%\1%' -e 's%^\.\/[^/]*$%./%' |
sort |
uniq -c
Pola pertama menangkap awal nama, titik, garis miring, nama hingga garis miring berikutnya dan garis miring, dan menggantikan garis hanya dengan bagian pertama, jadi:
./dir1/dir2/file1
diganti dengan
./dir1/
Replace kedua menangkap file secara langsung di direktori saat ini; mereka tidak memiliki garis miring di bagian akhir, dan diganti dengan ./. Sortir dan hitungan kemudian bekerja hanya pada jumlah nama.
./?