К сожалению, эту доброкачественную проблему трудно решить способом, который поддерживает все имена файлов и является переносимым. Этот безопасен (он обрабатывает скрытые файлы, пути, содержащие пробелы, тире и даже новые строки) и совместимость с POSIX:
find /path/to/directory -mindepth 1 -type f -name "*.mp4" -printf x | wc -c
Если вы не хотите, чтобы он был рекурсивным, просто добавьте -maxdepth 1.
Здесь будут перечислены все файлы, заканчивающиеся на .mp4, печатая каждый файл в новой строке (ls -1 *.mp4), передайте выходные данные в wc который будет подсчитывать количество новых строк, используя -l флаг.
Пояснение: Я думаю, что простая схема заключается в извлечении списка файлов и подсчете расширения с помощью grep. \. совпадать . и $ чтобы соответствовать добавочному номеру в конце строки. Это работает, потому что при передаче выходных данных ls в каждой строке отправляется одно имя файла, которое вы можете проверить, выполнив:
Простой, правильный, прямой ответ - это @louis-matthijssen one. обработка символов новой строки ls -1 в этом случае делает разумным разбор выходных данных ls. Отмеченный является неправильным для использования флага -R.