Essas soluções funcionam para o bash. Não tenho certeza se você deseja o número de cada tipo de arquivo ou o total.
Se você quiser o número total de arquivos de imagem, tente o seguinte:
ls {*jpg,*png,*gif} | wc -l
Isso significa ls
de qualquer coisa que termine com jpg
, png
ou gif
e passe por wc
.
Se você quiser o número de cada um, faça:
for n in jpg png gif; do echo -ne "$n\t"; ls *$n | wc -l; done
Este é um loop for. Ele será executado 3 vezes, uma vez para cada jpg png e gif. Cada vez que o loop é executado, a variável $n
tomará uma das extensões como um valor. Portanto, para a primeira execução, ls *$n
será expandido para ls *jpg
. echo
significa apenas "imprimir". echo -ne
significa imprimir sem uma nova linha ( -n
) e permitir caracteres de escape -e
, isso permite usar o caractere de tabulação \t
.
Isso funcionará bem, contanto que você tenha pelo menos um arquivo de cada tipo, caso contrário ele irá reclamar (ele ainda funcionará, ele só vai reclamar). Para uma versão um pouco mais robusta, tente isto:
for n in jpg png gif; do echo -ne "$n\t"; echo 'ls *$n 2>/dev/null | wc -l ' || echo 0; done
Esse loop é semelhante ao anterior, mas verifica se o comando ls
retorna um erro. O ||
operando no bash significa "Do isto ou, se este não funcionou, faça esse ". Então, eu estou dizendo bash para ls *jpg
etc e se ele não funcionar, ou seja, se não houver arquivos com essa extensão, echo (print) 0
. O 2>/dev/null
faz com que qualquer mensagem de erro seja descartada.
Você também pode usar awk (esta é uma modificação ligeira da resposta de mauro stettler contará apenas os arquivos com as extensões de seu interesse):
ls {*.jpg,*.png,*.gif} | awk -F'.' '{print $NF}' | sort | unic -c