возьмите 2 числа из имени файла, затем вставьте в команду

Я немного новичок в программировании в целом, и я не уверен, как выполнить эту задачу в моем сценарии bash.

Краткая предыстория: при импорте моей музыкальной библиотеки (ранее организованной iTunes) в Banshee все файлы были продублированы, чтобы соответствовать стилю номеров Banshee (например: 02 вместо 02 ), кроме того, iTunes, по-видимому, не сохранил ID3 теги к файлам, поэтому многие из них пусты. Итак, теперь у меня есть несколько тысяч тегов, которые нужно исправить, и дубликаты файлов, от которых нужно избавиться.

Чтобы автоматизировать процесс, я начал учиться писать bash-скрипты. Я придумал сценарий (который вы можете увидеть здесь), который делает четыре вещи: удаляет ненужные файлы iTunes, принимает ввод от пользователя об информации тега ID3 и сохраняет ее в переменных, очищает любую существующую информацию тега из всех файлов, записывает новые теги с информацией, полученной от пользователя, с помощью программы под названием eyeD3.

Теперь, вот где я столкнулся со своей проблемой. Этот скрипт в основном слепо записывает информацию во все mp3-файлы в каталоге. Это нормально для тегов, общих для всех файлов, таких как исполнитель, альбом, общее количество треков, год и т. д. Но я не могу пометить каждый отдельный номер трека с помощью этого метода. Так что я до сих пор вручную редактирую тэги треков по одному. И это то, что я действительно не хочу делать 2000+ раз.

Все имена файлов выглядят так:

01. song1.mp3
02. song2.mp3
03. song3.mp3

Команда для записи трек-номера в метку выглядит так:

$ eyeD3 -n 1 "01. song1.mpg"

Итак... Я не уверен, как это автоматизировать. Мне нужно взять первые две цифры имени каждого файла, сохранить их где-нибудь, а затем вызвать каждую из них в отдельную команду eyeD3.


person PatMcTookis    schedule 15.04.2014    source источник
comment
Возможно, есть немного другой способ. Я только что проверил, у Banshee есть плагин Musicbrainz service. Используя этот плагин, вы можете попробовать автоматически заполнять теги ID3.   -  person user3159253    schedule 15.04.2014
comment
Это может быть более продуктивным способом выполнения задачи, чем анализ каждого имени файла, потому что имена файлов часто не несут всю информацию тега, а только название песни.   -  person user3159253    schedule 15.04.2014


Ответы (1)


Вы можете перебирать файлы, используя подстановку, и использовать расширение подстроки для захвата первых двух символов имени файла:

for f in *mp3; do
    eyeD3 -n ${f:0:2} "$f"
done
person Josh Jolly    schedule 15.04.2014