Скрипт: рекурсивно конвертировать файлы wma в MP3, затем удалять файлы WMA

Я пытаюсь исправить скрипт, который рекурсивно ищет в дереве каталогов файлы WMA - преобразуя их в файлы MP3, а затем удаляя файлы WMA, оставляя преобразованные файлы MP3 на их месте. С некоторой помощью и исследованиями я нахожусь здесь:

   #!/bin/bash


shopt -s globstar


for f in **/*.[Ww][Mm][Aa]
do
    path=${f%/*}
    filename=${f##*/}
    new=${filename// /_}  # space -> underscore
    new=${new,,}             # lowercase
    mv -v -- "$f" "$path/$new"
done


for f in **/*.wma
do
    mplayer -vo null -vc dummy -af resample=44100 -ao pcm:waveheader "$f" && lame -m j -h --vbr-new -b 320 audiodump.wav -o "`basename "$f" .wma`.mp3"
    rm -f audiodump.wav
    rm -f "$f" "${f/%.wma}"
done 

Этот скрипт работает только 14.04 (не 15.10). На этом этапе он может просматривать подкаталоги, конвертировать файлы wma в MP3 и удалять соответствующие файлы WMA. Проблема заключается в том, что файлы MP3 создаются в каталоге MAIN, а не в каталогах соответствующих файлов WMA.

1 ответ

Решение

В другом месте вы используете "$f" без basename, так что указан путь к файлу. Это только в lame команда, которую вы используете basename, С basename, компоненты каталога будут потеряны. Выходной файл будет создан в том каталоге, в котором выполнялась команда.

Если вы просто хотите заменить .wma расширение с .mp3использовать "${f%.wma}.mp3", Это должно сохранить путь.

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