我有一个包含.flac
文件的多个子目录。我想把它们批量转换成.mp3
。路径名包含空格。现在我想做这样的事
find . -type f -regex .*.flac -exec ffmpeg -i {} -c:a mp3 -b:a 320k \;
但问题是,如何使用
{}
并用flac
替换mp3
来为ffmpeg提供输出文件名?在bash中,可以使用变量替换${file%.flac}.mp3
,但我不能在这里应用它。基于sed
的方法似乎也不适用于find
。有什么简单的解决办法吗?
最佳答案
如果您使用bash,我将使用globstar
,它将扩展到所有.flac
文件的列表:
shopt -s globstar nullglob
for file in **/*.flac; do
[[ -f $file ]] || continue
out_file=${file%.flac}.mp3
ffmpeg # your options here, using "$out_file"
done
复选框将跳过以
[[ -f $file ]]
结尾的任何目录。如果你没有这些,你可能会跳过这个。我还启用了
.flac
shell选项,这样一个与任何文件都不匹配的模式就会扩展为空(这样循环就不会运行)。关于bash - 批量处理在多个目录中查找的文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37906453/