Estoy usando cygwin en windows.
Deseo contar la cantidad de archivos jpeg, gif y png de una carpeta raíz.
Ahora puedo hacer:
ls . -1R | grep '.jpeg' | wc -l
ls . -1R | grep '.gif' | wc -l
ls . -1R | grep '.png' | wc -l
¿Pero pensé que si había una group by
sintaxis de tipo aquí podría hacer esto con un comando en lugar de tres?
¿Algun consejo?
.
en el nombre del archivo y que no hay espacios. Si realmente quieres usar gawk, imprime$NF
, no$2
.$NF
era lo que estaba buscando-n
es interpretar números como números, y no como cadenas. de lo contrario, a12
se considera inferior a a2
.También puedes usar
find
:Esto devuelve el número de archivos bajo
.
con extensionesjpeg
,gif
ypng
muy bien formateado con un resultado por línea:Agregue otras extensiones según sea necesario.
Explicación del comando:
find . -name \*.jpeg -o -name \*.gif -o -name \*.png
busca archivos que coincidan con ' .jpeg' o ' .gif' o '* .png'.
sed 's/.*\.\([^.]\+\)/\1/'
elimina el nombre de archivo y solo deja la extensión, por ejemplo, se
file.gif
conviertegif
sort
ordenar extensiones. Después de este comando, la salida se ve así:
uniq -c
informar el número de ocurrencias.
fuente
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:
Esto significa
ls
cualquier cosa que termine enjpg
,png
ogif
y que atraviesewc
.Si quieres el número de cada uno, haz:
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á als *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:
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
. Esto2>/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):
fuente
2>
significa redirigir mensajes de error,/dev/null
es un dispositivo especial en * nix utilizado para descartar cosas. Es solo un truco que descarta los mensajes de error.