脚本:递归地将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文件的目录中创建的。

在其他地方,你使用没有basename "$f" ,因此给出了文件的路径。 只有在lame命令中你才使用basename 。 使用basename ,目录组件将丢失。 将创建输出文件,该命令在该目录中运行。

如果您只想用.mp3替换.wma扩展名,请使用"${f%.wma}.mp3" 。 这应该保留这条道路。