Скрипт: рекурсивно конвертировать файлы 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"
, Это должно сохранить путь.