我正在尝试使用Mac终端中的bash shell批量处理大量文件。该脚本将使用 SoX Sound Exchange 库和{{<>>将以不同方式处理的混合2个版本的同一音频文件 {1}}( for mix )命令。我已经能够组合两个单独文件的简单组合,如下所示:
@Override
public Boolean deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException {
if (jp.currentToken() == JsonToken.START_ARRAY) {
jp.nextToken();
int recursionLevel = 1;
while(recursionLevel > 0) {
switch (jp.currentToken()) {
case START_ARRAY:
// just in case of nested arrays
recursionLevel++;
break;
case END_ARRAY:
recursionLevel--;
break;
}
jp.nextToken();
}
return true;
}
return false;
}
上面的工作就像一个魅力,只输出正确的结果。
但是,在编写批处理脚本时,要将所有文件放在要合并的文件夹中,我遇到了麻烦。首先,我的文件命名如下:
AF01-sweep1.wav
AF01-sweep2.wav
AF02-sweep1.wav
AF02-sweep2.wav
AF03-sweep1.wav
AF03-sweep2.wav
......等等......
这是脚本:
-m
此脚本的结果是,它将每个文件与“ sweep1 ”标记结合在一起,每个文件包含“两点清扫”。我需要将 af01-sweep1.wav 与 af01-sweep2.wav 结合使用,依此类推。我不知道在这里放什么命令或标志告诉bash寻找相同的名字,但区别在于“ sweep1 ”和“ sweep2 ”。我有成千上万的文件,因此制作一个处理 couple 的脚本至关重要。
我已经阅读了bash解决方案并发现了一些名为sox −m file1.wav file2.wav mixed.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
或-NAME
等命令一起使用。不确定,因为我没有正常编程。
答案 0 :(得分:0)
for f1 in *-sweep1.wav; do
prefix=${f1%-sweep1.wav}
f2=${prefix}-sweep2.wav
fout=${prefix}-mixed.wav
[[ -e $f2 ]] || { echo "Could not find $f2; skipping $f1" >&2; continue; }
[[ -e $fout ]] && { echo "$fout already exists; skipping $f1" >&2; continue; }
sox -V4 -m -v 1 "$f1" -v 1 "$f2" "$fout"
done