К сожалению, эту доброкачественную проблему трудно решить способом, который поддерживает все имена файлов и является переносимым. Этот безопасен (он обрабатывает скрытые файлы, пути, содержащие пробелы, тире и даже новые строки) и совместимость с POSIX:
find /path/to/directory -mindepth 1 -type f -name "*.mp4" -printf x | wc -c
Если вы не хотите, чтобы он был рекурсивным, просто добавьте -maxdepth 1
.
Вы не должны анализировать ls
выход.
Тест:
$ cd -- "$(mktemp -d)"$ touch -- -foo.mp4 .bar.mp4 .bat.mp4 'baz.mp4> ban.mp4'$ find . -mindepth 1 -type f -name "*.mp4" -exec printf x \; | wc -c4
Сравните с принятый ответ:
$ ls -lR ./*.mp4 | wc -l3
Или другие предложения:
$ find . -name "*.mp4" | wc -l5$ ls -1 *.mp4 | wc -lls: invalid option -- '.'Try 'ls --help' for more information.0$ find . -name "*.mp4" | wc -c # Answer fixed at a later time51$ find . -name "*.mp4" | wc -l5$ find . | grep -i ".mp4$" | wc -l5$ ls . | grep ".mp4$" | wc -l3