如何使用 bash 将子目录中的所有目录 mp3 文件转换为 lame?

How to convert all directory mp3 files in a subdirectory with lame using bash?

我在 Windows 8.1 中使用 git bash 并且安装了 lame。我的 git 在我的 Laravel 目录中。对于 1 次转换,我使用:

/c/Lame/lame --mp3input -V2 -b 64 public/songs/album/album_1000/song_Emmene-moi_1379645693.mp3 public/songs/album/album_1000/64kb/song_Emmene-moi_1379645693.mp3

效果很好。但是当我想一次全部转换时,我会尝试:

for file in public/songs/album/album_1000/*.mp3; 
do /c/Lame/lame --mp3input -b 64 "$file" 64kb/"${file%.*}".mp3; done

我收到错误:

无法初始化输出文件 '64kb/public/songs/album/album_1000/song_Bagay 9 (Remix)_1379645802.mp3' 无法初始化输出文件 '64kb/public/songs/album/album_1000/song_Bootleg_1379645790.mp3' 无法初始化输出文件 '64kb/public/songs/album/album_1000/song_Emmene-moi_1379645693.mp3' ...

我需要将它们添加到名为 64kb 的子目录中,例如 public/songs/album/album_1000/64kb/song_Emmene-moi_1379645693.mp3

这是稍后在 PHP 代码中使用的,我将有专辑、album_1000 和 mp3 歌曲名称的变量,因此 album_1000/ 上的任何字符串替换为 album_1000/64kb/ 就好了。

经过一些测试后,我让它可以使用内部字符串替换模式

{$Var//string_to_replace/new_string} :

$ for file in public/songs/album/album_1000/*.mp3;
do /c/Lame/lame --mp3input -b 64 "$file" "${file//album_1000/album_1000/64kb}"; done

这对我有用。

您必须有一个以 / 开头的绝对路径,否则它将不起作用。无论如何,这在我的 mac 上解决了它 运行。这不是一些其他相关在线帖子提到的文件夹权限问题。