Я хочу подсчитать общее количество файлов в определенном каталоге, которое заканчивается расширением «.mp4».
Я получаю следующую команду:
ls -F |grep -v / | wc -l
Он считает все файлы в определенном каталоге, но мне нужно количество файлов, которые заканчиваются расширением .mp4.
Есть ли для этого какая-либо команда Ubuntu?
Здесь можно сделать этот путь
ls -lR /path/to/dir/*.jpg | wc -l
, Это дает Вам количество
К сожалению, эту мягкую проблему трудно решить способом, какие поддержки все имена файлов и являются портативными. Это безопасно (это обрабатывает скрытые файлы, пути, содержащие пробелы, тире и даже новые строки) <забастовка> и 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 -c
4
Соответствуют принятый ответ :
$ ls -lR ./*.mp4 | wc -l
3
Или другие предложения:
$ find . -name "*.mp4" | wc -l
5
$ ls -1 *.mp4 | wc -l
ls: invalid option -- '.'
Try 'ls --help' for more information.
0
$ find . -name "*.mp4" | wc -c # Answer fixed at a later time
51
$ find . -name "*.mp4" | wc -l
5
$ find . | grep -i ".mp4$" | wc -l
5
$ ls . | grep ".mp4$" | wc -l
3
Я думаю, что это очень просто как после команд.
$ find . -name "*.mp4" | wc -l
8
или
$ find . | grep -i ".mp4$" | wc -l
8
я думаю, что выше команд вычисляют количество файлов и названий каталогов *.mp4
, таким образом, я предлагаю, чтобы Вы использовали -type f
опция в качестве find
параметр как после.
$ find . -name "*.mp4" -type f | wc -l
8
, Кроме того, ls -lR
может использоваться в качестве find .
Вы могли использовать ls -1 *.mp4 | wc -l
.
Это перечислит все файлы, заканчивающиеся на .mp4
, печатая каждый файл на новой строке (ls -1 *.mp4
), передаст вывод по каналу к wc
, который будет считать количество новых строк с помощью эти -l
флаг.
Это должно дать Вам, список файла с .mp4
ls /path/to/directory | grep ".mp4$"
, Когда объединено с wc -l
даст Вам количество
ls /path/to/directory | grep ".mp4$" | wc -l
, если Вы захотите, чтобы поиск включал подкаталоги
ls -lR /path/to/directory | grep ".mp4$" | wc -l
Этот находит, виды, и перечисляет все файлы следовательно в порядке:
find . -type f | sed 's/.*\.//' | sort | uniq -c
ls | grep --count \.csv$
Замена (.csv с расширением Вы хотите)
Объяснение: Я думаю, что простая схема состоит в том, чтобы выбрать список файлов, и считать расширение с grep. \.
для соответствия .
и $
для соответствия расширению в конце строки. Это работает, потому что, когда вывод ls передается по каналу, одно имя файла отправляется на строку, который можно проверить путем выполнения:
ls | cat
В ударе, одном холодном обращении к использованию массивов с шариком:
$ files=( *.mp4 )
$ echo ${#files[@]}
30
Проверьте, Как считать Файлы Следовательно В Linux?, это дает хороший ответ и объяснение, можно использовать следующую команду:
find . -type f | sed -n 's/..*\.//p' | sort | uniq -c
Вы всегда можете просто использовать цикл for, который, как мне кажется, имеет то преимущество, что вам не нужно запоминать флаги нескольких разных команд.
Например:
a=0; for i in ./*.jpg; do a=$(expr $a + 1); done; echo $a