如何操作具有已知后缀的一对具有相同名称的文件?

时间:2017-09-25 21:08:41

标签: bash shell terminal sox

我正在尝试使用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等命令一起使用。不确定,因为我没有正常编程。

1 个答案:

答案 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