我有一个包含.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 ]]结尾的任何目录。如果你没有这些,你可能会跳过这个。
我还启用了.flacshell选项,这样一个与任何文件都不匹配的模式就会扩展为空(这样循环就不会运行)。

关于bash - 批量处理在多个目录中查找的文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37906453/

10-10 17:38