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

Сценарий Bash ждать завершения работы виртуальной машины Virtualbox?
Samba net команда для завершения работы Windows 8 машина [дубликат]
Как проверить, доступно ли подключение к Интернету через терминал
найти количество команд из файла [закрыт]
Попытка распаковать файл внутри подкаталога получение ошибки: внимание: имя файла не совпадает
"read" работает как ожидалось в ZSH, но ведет себя по-другому при использовании любой другой оболочки
"/usr/bin / env bash" не найден при запуске из сценария cron
Имейте файл с именем ~ (Тильда) в моем домашнем каталоге
Терминал Linux-замороженное обновление ввода, но может выполнять команды?
Как копировать файлы с помощью ditto с обратными косыми чертами в именах файлов
bash:/home/пользователь/.bashrc: отказано в разрешении при попытке изменить пользователя с root на user
Как создать действительный случайный MAC-адрес с помощью bash shell
Linux Bash-как узнать, в каком каталоге я на самом деле с символическими ссылками?
Архивирование файлов размером более 2 ГБ в оболочке bash
Выполните команду терминала, не сохраняя ее.история bash на OS X?

Сортировка музыкальной библиотеки по BPM

Я использую инструмент под названием bpm-tag, который принимает mp3-файл ("myfile.mp3") в качестве входа и выхода " myfile.mp3: XX.XXX BPM". Я хотел бы запустить сценарий, который проходит через мою музыкальную библиотеку, вычисляет BPM каждой песни и перемещает его в каталог в соответствии с его BPM (e.G каталог "Slow" для <80 BPM и т. д.). У меня есть смутное представление о том, как это сделать, но я не знаю, как разобрать вывод BPM-tag, чтобы получить значение BPM.

какие предложения ?

5
задан Adrien MORIN
источник

1 ответов

вот что я сделала. Это, казалось, работало (но, к сожалению, BPM-tag не был достаточно точным для многих песен...).

#!/bin/bash

cd /path/to/my/library

while IFS= read -r -d '' FILE; do
    BPM=$(bpm-tag -f -n "$FILE" 2>&1 | sed "s/.mp3:/%/" | cut -d'%' -f2 | sed "s/ BPM//" | sed "s/^ //" | cut -d'.' -f1) 
#bpm-tag has its output in stderr, so I use 2>&1 to redirect it to stdout, then format it with sed and cut
    if [ "$BPM" -le 130 ]
        then cp "$FILE" /path/to/my/library/Slow/
    elif [ "$BPM" -le 180 ]
        then cp "$FILE" /path/to/my/library/Medium/
    else cp "$FILE" /path/to/my/library/Fast/
    fi
done < <(find . -type f -name '*.mp3' -print0)

здесь

while IFS= read -r -d '' FILE; do
    echo "$FILE"
done < <(find . -type f -name '*.mp3' -print0)

печатает все файлы (-type f), заканчивающиеся на .mp3 (- name'*.mp3'), которые находятся в папке или одной из ее подпапок. Как я понимаю, параметры-print0 и-r-d " предназначены для форматирования, но я действительно не понимаю, как это работает.

2
отвечен Adrien MORIN 2018-04-04 12:28:35
источник

Другие вопросы bash bpm sorting