Bash 批处理将文件转换为不同的输出文件夹

Bash 批处理将文件转换为不同的输出文件夹,bash,macos,terminal,Bash,Macos,Terminal,目标是在不同的位置将所有.wav文件转换为.mp3。 下面的代码可以工作,但会在同一目录中创建输出文件。 所有新创建的.mp3都与.wav并排 for file in /path/to/*.wav; do lame --preset insane "$file" "${file%.wav}".mp3; done 如何使用终端将满是.wav的驱动器转换为lame并将.mp3输出到其他驱动器?我尝试过更改lame的输出,但这种语法会占用整个文件名。寻找最简单

目标是在不同的位置将所有.wav文件转换为.mp3。 下面的代码可以工作,但会在同一目录中创建输出文件。 所有新创建的.mp3都与.wav并排

for file in /path/to/*.wav; do lame --preset insane "$file" "${file%.wav}".mp3; done
如何使用终端将满是.wav的驱动器转换为lame并将.mp3输出到其他驱动器?我尝试过更改lame的输出,但这种语法会占用整个文件名。寻找最简单的解决方案

从lame手册中,概要非常简单:

lame [options] <infile> <outfile>
lame[选项]

找到了基本概念

假设输出文件应放置到/output,可以扩展循环以使用“basename”计算输出文件名

OUT=/output
for file in /path/to/*.wav; do
    # Replace .wav with .mp3
    out=${file%.wav}.mp3
    # Remove directory (anything up to the last '/'
    out=${file##*/}
    lame --preset insane "$file" $OUT/$out
done

最简单的方法是在运行
lame
之前,只将
cd
放入所需的输出目录。您可能可以执行
“/path\u to\u folder/${file%.wav}”.mp3
作为
lame
的输出参数。您还有
/path/to/
作为glob的一部分,因此相同的路径将成为输出参数的一部分…几乎得到了它,得到了一个“cannotinitoutfile”,但似乎指向了正确的目标!将
cd
用于所需的输出目录,然后对**/*.wav中的文件运行
;do lame——预设疯狂的“$file”“/Volumes/MUSICA/${file%.wav}”.mp3;完成
仍不工作,正在获取“无法初始化输出文件”。如何从该步骤中删除路径中的目录?我想为输出文件(如/Volumes/disk1)指定一个完全不同的路径。“谢谢你们的帮助,差一点就搞定了。”RyanvonSchwedler的回答是固定的,可以将输出放在OUT设置为的任何位置。