Abordagem de script de shell simples:
#!/bin/sh
if [ "$#" -ne 2 ]; then
echo "Usage: $0 directory extension" >&2
exit 1
fi
cd "$1" || exit 1
for d in *; do
[ -d "$d" ] || continue
printf "%s: %i\n" "$d" \
"$(find "$d" -type f -name "*.$2" -printf '1\n' | wc -l)"
done
... que apenas usa shell para percorrer todos os arquivos / diretórios em seu diretório de destino (bem, exceto os ocultos que começam com .
). Ele ignora os não-diretórios e, para os diretórios, imprime o nome seguido pela contagem de arquivos (obtida usando find
e wc
). O find … -printf '1\n'
é para que o achado imprima apenas 1
para cada arquivo encontrado - não imprimir o nome do arquivo evita todos os problemas com, por exemplo, novas linhas em nomes de arquivos. E só precisamos contar as linhas, nada mais.