Uma solução GNU ( bash
, wc
e find
) que funciona com qualquer caminho , mesmo aqueles contendo espaços, novas linhas ou começando com um traço:
shopt -s nullglob
for dir in ./*/
do
printf '%s\n' "$dir"
find "$dir" -mindepth 1 -printf x | wc --chars
done
Explicação:
- A opção
nullglob
evita erros se./
não contiver diretórios. - O
./
no diretório glob garante que os nomes de arquivos que começam com um traço ("-
") não atrapalhemecho
oufind
. - A barra no final da glob garante que apenas diretórios sejam processados.
-
-mindepth 1
evita contar o próprio diretório. - Se você deseja incluir diretórios que começam com um ponto no nível superior, execute
shopt -s dotglob
antes do loopfor
.