Estas soluciones funcionan para bash. No estoy seguro si desea el número de cada tipo de archivo o el total.
Si desea el número total de archivos de imagen, intente esto:
ls {*jpg,*png,*gif} | wc -l
Esto significa ls
cualquier cosa que termine en jpg
, png
o gif
y que atraviese wc
.
Si quieres el número de cada uno, haz:
for n in jpg png gif; do echo -ne "$n\t"; ls *$n | wc -l; done
Este es un ciclo for. Se ejecutará 3 veces, una para cada uno de jpg png y gif. Cada vez que se ejecuta el bucle, la $n
variable tomará una de las extensiones como valor. Entonces, para la primera ejecución, ls *$n
se ampliará a ls *jpg
. echo
esencialmente solo significa "imprimir". echo -ne
significa imprimir sin una nueva línea ( -n
) y permitir caracteres de escape -e
, esto me permite usar el carácter de tabulación \t
.
Esto funcionará bien siempre que tenga al menos un archivo de cada tipo, de lo contrario se quejará (seguirá funcionando, solo se quejará). Para una versión un poco más robusta, intente esto:
for n in jpg png gif; do echo -ne "$n\t"; echo `ls *$n 2>/dev/null | wc -l ` || echo 0; done
Este bucle es similar al anterior pero comprueba si el ls
comando devuelve un error. El ||
operando en bash significa "Haz esto o, si esto no funcionó, haz eso ". Por lo tanto, le digo a bash, ls *jpg
etc., y si no funciona, es decir, si no hay archivos con esa extensión, echo (print) 0
. Esto 2>/dev/null
hace que se descarten los mensajes de error.
También puede usar awk (esta es una ligera modificación de la respuesta de mauro stettler, por lo que contará solo los archivos con las extensiones que le interesan):
ls {*.jpg,*.png,*.gif} | awk -F'.' '{print $NF}' | sort | unic -c
.
en el nombre del archivo y que no hay espacios. Si realmente quieres usar gawk, imprime$NF
, no$2
.