У меня есть список некоторого mp3:
song 1.mp3
song 2.mp3
.
.
.
song 349.mp3
Я вижу их скорость передачи через правую кнопку мыши-> Свойства-> Аудио/Видео, но также и я могу проверить его с помощью терминальной команды
file "song 1.mp3"
Я хотел бы узнать, какая скорость передачи из моего списка наиболее часто используется, таким образом, я думал, что это будет приятно сделано через оболочку т.е. сценарий оболочки.
Я потерял бы слишком много времени, если бы я ввел
file "song 1.mp3"; file "song 2.mp3"; ... ; file "song 349.mp3"
Так, мой вопрос:
Мы можем передать аргументы линию за линией от некоторого текстового файла для окружения функции? Дополнительная проблема состоит в том, что мои названия песни содержат пробелы.
Принятие Вашего списка файлов является одним именем файла на строку, xargs
утилита должна смочь обработать имена файлов с пробелами в них при определении новой строки как символа-разделителя, например.
xargs -d '\n' file < filelist.txt
Если Вы предпочитаете использовать функцию оболочки
while IFS= read -r f; do [[ -z "$f" ]] || file "$f"; done < filelist.txt
Можно использовать шарик оболочки как *.mp3
выбрать все файлы в текущем каталоге тот конец с .mp3
. Это будет автоволшебно заботиться о пробелах и других специальных символах также.
На mp3 я протестировал, я был произведен как это для file
:
01 - Mystery Of A Blood Red Rose.mp3: Audio file with ID3 version 2.3.0, contains: MPEG ADTS, layer III, v1, 56 kbps, 44.1 kHz, Stereo
Вы сказали, что интересуетесь скоростью передачи, т.е. 56 kbps
здесь. Мы можем использовать grep
извлечь только что часть вывода с регулярным выражением как '\d+\s+kbps'
(одна или несколько цифр, сопровождаемых одними или несколькими пробелами, сопровождаемыми строкой "Кбит/с").
До сих пор можно использовать это для проявления только информации о скорости передачи для всех mp3 файлов в текущем каталоге:
file *.mp3 | grep -Po '\d+\s+kbps'
Теперь это производит длинный список с одной строкой на файл, но Вы хотели хорошую статистическую величину с общими количествами. Мы можем сделать это путем сортировки списка сначала (использующий режим вида натурального числа) и затем рассчитывающий, как часто каждая уникальная строка появляется. Инструменты для этого sort
и uniq
:
file *.mp3 | grep -Po '\d+\s+kbps' | sort -n | uniq -c
На одной из моих музыкальных папок вывод был похож ниже. Первое число является количеством файла, вторым скорость передачи:
16 32 kbps
18 56 kbps
67 128 kbps
3 192 kbps
6 256 kbps
38 320 kbps