我使用一种名为 mp3wrap 的实用程序,它将多个 mp3 合并为一个。假设我有一个目录“album 1”,其中包含三个文件“track 1.mp3”、“track 2.mp3”和“track 3.mp3”。我将运行以下命令:
mp3wrap album\ 1.mp3 album\ 1/*.mp3
它将把“album 1”目录(第二个参数)中的所有三个曲目合并到一个新文件“album 1.mp3”(第一个参数)中。
我有很多这样的目录,“专辑 2”、“专辑 3”等,我想编写一个脚本来自动化该过程。我试过这个:
for i in album*
do
mp3wrap $i.mp3 $i/*.mp3
done
但我得到了错误
1.mp3: No such file or directory
看来我的脚本将 $i 扩展为“album 1.mp3”,它作为两个单独的参数传递。经过一番搜索和阅读后,我得到了以下结果:
for i in album*
do
mp3wrap "${i}.mp3" "${i}/*.mp3"
done
现在我没有收到错误消息,而是从 mp3wrap 程序中收到“使用”页面。很明显,它接收参数的方式与我从命令行运行命令时的方式不同,而且我不知道如何检查 bash 脚本执行时实际的命令行是什么样的。
我究竟做错了什么?任何帮助表示赞赏!
答案1
你离它很近了。这是正确的代码:
for i in album*
do
mp3wrap "${i}.mp3" "${i}"/*.mp3
done
变量和参数几乎应该总是被引用以避免您的第一个问题。相反,shell globing 字符喜欢*
但?
不应该,否则它们就会失去其特殊含义。