find -maxdepth 1 -type d | while read -r dir; do printf "%s:\t" "$dir"; find "$dir" -type f | wc -l; done
Agradecimentos a Gilles e xenoterracide pelas 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 - enquanto o canal entrando no while estiver aberto (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 guia.
A quarta parte: find "$dir -f file"
faz uma lista de todos os arquivos dentro do nome do diretório contido 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 nele, para que possamos contar todos eles usando wc -l
. O resultado será semelhante a:
./dir1: 234
./dir2: 11
./dir3: 2199
...