Эти решения работают на bash. Я не уверен, хотите ли вы номер каждого типа файла или общее количество.
Если вы хотите общее количество файлов изображений, попробуйте это:
ls {*jpg,*png,*gif} | wc -l
Это означает , что ls - нибудь окончание в jpg png или gif и трубы через wc
Если вы хотите номер каждого, сделайте:
for n in jpg png gif; do echo -ne "$n\t"; ls *$n | wc -l; done
Это для цикла. Он будет запущен 3 раза, по одному для каждого из JPG PNG и GIF. Каждый раз при запуске цикла переменная $n принимает одно из расширений в качестве значения. Итак, для первого запуска ls *$n будет расширен до ls *jpg . echo сути просто означает "печать". echo -ne означает печать без новой строки (-n) и позволяет использовать escape-символы -e , это позволяет мне использовать символ табуляции \t .
Это будет хорошо работать, если у вас есть хотя бы один файл каждого типа, в противном случае он будет жаловаться (он все равно будет работать, он будет только жаловаться). Для чуть более надежной версии попробуйте это:
for n in jpg png gif; do echo -ne "$n\t"; echo `ls *$n 2>/dev/null | wc -l ` || echo 0; done
Этот цикл аналогичен приведенному выше, но проверяет, возвращает ли команда ls ошибку. || Операнд в bash означает «Сделай это или, если это не сработало, сделай это ». Итак, я говорю bash для ls *jpg т.д., И если он не работает, т.е. если нет файлов с таким расширением, echo (print) 0 . 2>/dev/null приводит к тому, что любые сообщения об ошибках отбрасываются.
Вы также можете использовать awk (это небольшая модификация ответа mauro stettler, поэтому он будет считать только файлы с интересующими вас расширениями):
ls {*.jpg,*.png,*.gif} | awk -F'.' '{print $NF}' | sort | unic -c