Ви можете домовитись знайти всі файли, видалити імена файлів, залишивши рядок, що містить лише ім'я каталогу для кожного файлу, а потім підрахувати кількість показів кожного каталогу:
find . -type f |
sed 's%/[^/]*$%%' |
sort |
uniq -c
Єдине завдання в цьому випадку, якщо у вас є імена файлів або імена каталогів, що містять символ нового рядка, що малоймовірно. Якщо вам справді доводиться турбуватися про нові рядки в іменах файлів або іменах каталогів, я пропоную вам їх знайти та виправити, щоб вони не містили нових рядків (і тихо переконуйте винну сторону у помилці їх шляху).
Якщо вас цікавить кількість файлів у кожному підкаталозі поточного каталогу, підрахунок будь-яких файлів у будь-яких підкаталогах разом з файлами у безпосередньому підкаталозі, я би адаптував sed
команду для друку лише каталог верхнього рівня:
find . -type f |
sed -e 's%^\(\./[^/]*/\).*$%\1%' -e 's%^\.\/[^/]*$%./%' |
sort |
uniq -c
Перший візерунок фіксує початок імені, крапки, косою рисою, ім'я до наступної косої риски та косою рисою, і замінює рядок лише на першу частину, так:
./dir1/dir2/file1
замінюється на
./dir1/
Друга заміна захоплює файли безпосередньо в поточному каталозі; вони не мають косою рисою в кінці, а їх замінюють на ./
. Сортування та підрахунок тоді працює лише на кількість імен.
./
?