Подсчитать общее количество файлов в определенном каталоге с определенным расширением

Я хочу подсчитать общее количество файлов в определенном каталоге, которое заканчивается расширением «.mp4».

Я получаю следующую команду:

ls -F |grep -v / | wc -l

Он считает все файлы в определенном каталоге, но мне нужно количество файлов, которые заканчиваются расширением .mp4.

Есть ли для этого какая-либо команда Ubuntu?

32
задан 24 April 2014 в 23:39

10 ответов

Здесь можно сделать этот путь

ls -lR /path/to/dir/*.jpg | wc -l

, Это дает Вам количество

0
ответ дан 24 April 2014 в 23:39

К сожалению, эту мягкую проблему трудно решить способом, какие поддержки все имена файлов и являются портативными. Это безопасно (это обрабатывает скрытые файлы, пути, содержащие пробелы, тире и даже новые строки) <забастовка> и 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
0
ответ дан 24 April 2014 в 23:39

Я думаю, что это очень просто как после команд.

$ 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 .

0
ответ дан 24 April 2014 в 23:39

Вы могли использовать ls -1 *.mp4 | wc -l.

Это перечислит все файлы, заканчивающиеся на .mp4, печатая каждый файл на новой строке (ls -1 *.mp4), передаст вывод по каналу к wc, который будет считать количество новых строк с помощью эти -l флаг.

0
ответ дан 24 April 2014 в 23:39

Это должно дать Вам, список файла с .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
0
ответ дан 24 April 2014 в 23:39

Этот находит, виды, и перечисляет все файлы следовательно в порядке:

find . -type f | sed 's/.*\.//' | sort | uniq -c
0
ответ дан 25 April 2014 в 10:39
  • 1
    О, хорошо, даже это doesn' t справка. Я предполагаю I' ll должны создать раздел с gparted. What' s еще более странный, второй раздел (I' ve переключается с отдельного корня и домашних разделов к одному корневому разделу для упрощения проблемы), doesn' t вызывают любые проблемы несмотря на то, чтобы быть в ~250 раз больше. – wintermute 25 October 2015 в 02:07

ls | grep --count \.csv$

Замена (.csv с расширением Вы хотите)

Объяснение: Я думаю, что простая схема состоит в том, чтобы выбрать список файлов, и считать расширение с grep. \. для соответствия . и $ для соответствия расширению в конце строки. Это работает, потому что, когда вывод ls передается по каналу, одно имя файла отправляется на строку, который можно проверить путем выполнения:

ls | cat

0
ответ дан 18 April 2019 в 23:21

В ударе, одном холодном обращении к использованию массивов с шариком:

$ files=( *.mp4  )
$ echo ${#files[@]}
30
0
ответ дан 18 April 2019 в 23:21

Проверьте, Как считать Файлы Следовательно В Linux?, это дает хороший ответ и объяснение, можно использовать следующую команду:

find . -type f | sed -n 's/..*\.//p' | sort | uniq -c
0
ответ дан 23 November 2019 в 00:38

Вы всегда можете просто использовать цикл for, который, как мне кажется, имеет то преимущество, что вам не нужно запоминать флаги нескольких разных команд.

Например:

a=0; for i in ./*.jpg; do a=$(expr  $a + 1); done; echo $a 
2
ответ дан 6 February 2020 в 17:27

Другие вопросы по тегам:

Похожие вопросы: