Сценарий: рекурсивно конвертировать 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 -mj -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.

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

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