我正在尝试修复一个脚本,该脚本会递归搜索目录树中的 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"
。这样应该会保留路径。