com zsh :
count() echo $#
count * # non-hidden files (all types)
count *(D) # files (all types)
count **/*(D) # files recursively (all types)
count **/*(D/) # directories only (recursively)
( zsh globs nunca inclui . nem .. mesmo quando dotglob está habilitado (como com o qualificador% glob_de (D) )).
Para evitar uma mensagem de erro quando não houver arquivo, adicione o qualificador N globbing:
count *(ND)
Isso faz com que o glob se expanda em nada (nenhum argumento, não um argumento vazio) se não houver correspondência.
Observe que, como o caractere de nova linha é um caractere tão válido quanto qualquer outro em um nome de arquivo, canalizar a saída de ls ou find para wc -l não está correto.
POSIXly, você pode contar os caracteres / em vez dos novos:
find . ! -name . -prune -print | grep -c /
Ou recursivamente, usando este truque:
find .//. ! -name . -prune -print | grep -c //