【发布时间】:2017-09-25 21:08:41
【问题描述】:
我正在尝试在 Mac 终端中使用 bash shell 批处理大量文件。该脚本将使用 SoX Sound Exchange 库和 @ 987654323@(用于混合)命令。我已经能够将 2 个单独文件的简单组合组合在一起,如下所示:
sox −m file1.wav file2.wav mixed.wav
上面的工作就像一个魅力,只是输出正确的结果。
但是,在编写批处理脚本时,要获取要合并的文件夹中的所有文件,我遇到了麻烦。首先,我的文件命名如下:
af01-sweep1.wav
af01-sweep2.wav
af02-sweep1.wav
af02-sweep2.wav
af03-sweep1.wav
af03-sweep2.wav
……等等……
这是脚本:
for file in ./*sweep1*
do
for file2 in ./*sweep2*
do
out=COMBINED
sox -V4 -m -v 1 $file -v 1 $file2 $file-$out.wav
done
done
这个脚本的结果是它将每个文件与标记“sweep1”与每个文件包含“扫2”。我只需要将前 af01-sweep1.wav 与 af01-sweep2.wav 结合起来,依此类推。我不知道在这里放什么命令或符号来告诉 bash 寻找相同的名称,但有“sweep1”和“sweep2”的区别。我有数千个文件,所以制作一个处理情侣的脚本至关重要。
我已经阅读了有关 bash 解决方案的信息,发现了一些名为 -NAME 的东西,并相信它可以与 MATCH 或 FIND 等命令一起使用。不确定,因为我不正常编程。
【问题讨论】:
-
Looping over pairs of files 中的一些答案非常相关,尽管问题本身并不是 100% 正确。在提出新问题之前,您是否尝试过搜索重复项?
-
顺便说一句,
$file1与"$file1"不同。有时它可能看起来很有效,但是当您获得更有趣的文件名(即带有空格或 glob 的名称)时,它可能会严重失败。在所有扩展中使用引号;考虑通过shellcheck.net运行代码