find -maxdepth 1 -type d | while read -r dir; do printf "%s:\t" "$dir"; find "$dir" -type f | wc -l; done
Спасибо Жилю и ксенотеррациду за исправления безопасности / совместимости.
Первая часть: find -maxdepth 1 -type d
вернет список всех каталогов в текущем рабочем каталоге. Это по трубопроводу ...
Вторая часть: while read -r dir; do
начинается цикл while - пока канал, входящий в while, открыт (то есть до тех пор, пока не будет отправлен весь список каталогов), команда read поместит следующую строку в переменную "dir". Тогда это продолжается ...
Третья часть: printf "%s:\t" "$dir";
напечатает строку в «$ dir» (которая содержит одно из имен каталогов) с последующей вкладкой.
Четвертая часть: find "$dir -f file"
составляет список всех файлов внутри имени каталога, хранящихся в «$ dir». Этот список отправляется ..
Пятая часть: wc -l;
подсчитывает количество строк, которые отправляются на его стандартный ввод.
Последняя часть: done
просто завершает цикл while.
Таким образом, мы получаем список всех каталогов в текущем каталоге. Для каждого из этих каталогов мы генерируем список всех файлов в нем, чтобы мы могли сосчитать их все, используя wc -l
. Результат будет выглядеть так:
./dir1: 234
./dir2: 11
./dir3: 2199
...