Аргументы передачи из файла линию за линией для функционирования

У меня есть список некоторого 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"

Так, мой вопрос:

Мы можем передать аргументы линию за линией от некоторого текстового файла для окружения функции? Дополнительная проблема состоит в том, что мои названия песни содержат пробелы.

4
задан 31 March 2018 в 17:17

2 ответа

Принятие Вашего списка файлов является одним именем файла на строку, xargs утилита должна смочь обработать имена файлов с пробелами в них при определении новой строки как символа-разделителя, например.

xargs -d '\n' file < filelist.txt

Если Вы предпочитаете использовать функцию оболочки

while IFS= read -r f; do [[ -z "$f" ]] || file "$f"; done < filelist.txt
9
ответ дан 23 November 2019 в 11:38

Можно использовать шарик оболочки как *.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
5
ответ дан 23 November 2019 в 11:38

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

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