find -maxdepth 1 -type d | while read -r dir; do printf "%s:\t" "$dir"; find "$dir" -type f | wc -l; done
Graças a Gilles e xenoterracide para correções de segurança / compatibilidade.
A primeira parte: find -maxdepth 1 -type d
retornará uma lista de todos os diretórios no diretório de trabalho atual. Isso é canalizado para ...
A segunda parte: while read -r dir; do
inicia um loop while - desde que o pipe que entra no while esteja aberto (o que é até que toda a lista de diretórios seja enviada), o comando read colocará a próxima linha na variável "dir". Então continua ...
A terceira parte: printf "%s:\t" "$dir";
imprimirá a string em "$ dir" (que contém um dos nomes de diretório) seguido por uma aba.
A quarta parte: find "$dir -f file"
faz uma lista de todos os arquivos dentro do nome do diretório em "$ dir". Esta lista é enviada para ..
A quinta parte: wc -l;
conta o número de linhas que são enviadas para sua entrada padrão.
A parte final: done
simplesmente termina o loop while.
Portanto, obtemos uma lista de todos os diretórios no diretório atual. Para cada um desses diretórios, geramos uma lista de todos os arquivos para que possamos contar todos usando wc -l
. O resultado será parecido com:
./dir1: 234
./dir2: 11
./dir3: 2199
...