LINUX.ORG.RU

bash question


0

0

пытаюсь осилить advanced bash scripting-туториал, конечно отличный,но..
допустим есть директория с мп3, где названия файлов такие:
01 - Some Song1.MP3
02 - Some Song2.MP3
...
требуется:
выдернуть из имён - titles для тэгов, затем привести файлы к такому виду:
01.mp3
02.mp3
...
делаю примерно так:
1.часть, отвечающая за парсинг имени файла и запись его в кач-ве титла, выглядит так:
eyeD3 -t `ls 01 - Some Song1.MP3 | sed 's/[0-9]\+ - //; s/.MP3//'` 01 - Some Song1.MP3
2.как правильно оформить замену одного расширения на другое, чтобы это решение можно было потом поюзать ещё (в abst пример есть - но что-то не догоню никак применительно к ситуации)
3.как передать параметры скрипта - вызываемым внутри скрипта утилитам, т.е.:
если скрипт запустить для 10 мп3 указанного формата в директории:
script dir1/*.MP3
как передать список [01-10].MP3 тому же eyeD3 ?
например так (предпологается что после запуска script dir1/*.MP3 eyeD3 последовательно должен получить имена файлов и пронумеровать тэги):
for i in "$@"; do
eyeD3 -n $i
сколько вариантов не пробовал - что-то не выходит правильно...

anonymous

Re: bash question

вопрос 2 - с рассмотрения снимается:
покурил туториал, вся понял окончательно.
в итоге остался только третий вопрос.=)

anonymous ()
Ответ на: Re: bash question от anonymous

Re: bash question

for i in $(seq $#)
    do eyeD3 --blah "${!i}"
done

grob ★★★★★ ()
Ответ на: Re: bash question от grob

Re: bash question

Спасибо огромное, работает, только следом возникла трабла:
перестал работать метод выдергивания титлов =)
делаю так:
TITLE=`ls "${!i}" | sed 's/[0-9]\+ - //; s/.MP3//'` #переменная

for i in $(seq $#)
do
eyeD3 -t "$TITLE"
done

В итоге заголовки пустые, то есть переменная не получает нужной строки.
Ошибка, видимо, в ls "${!i}" , но как тогда правильно получить имя файла ?

anonymous ()
Ответ на: Re: bash question от anonymous

Re: bash question

--fixed--
Спасибо огромное, работает, только следом возникла трабла:
перестал работать метод выдергивания титлов =)
делаю так:
TITLE=`ls "${!i}" | sed 's/[0-9]\+ - //; s/.MP3//'` #переменная

for i in $(seq $#)
do
eyeD3 -t "$TITLE" "${!i}"
done

В итоге заголовки пустые, то есть переменная не получает нужной строки.
Ошибка, видимо, в ls "${!i}" , но как тогда правильно получить имя файла ?

anonymous ()
Ответ на: Re: bash question от anonymous

Re: bash question

#!/bin/bash

for i in $(seq $#)
  do eyeD3 --set-encoding=utf8 -t "$(sed -e 's/^[0-9]\+ - //' -e's/\.mp3$//' <<< ${!i})" "${!i}" 
done

grob ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.