2017-09-25 33 views
0

我正尝试批处理过程使用的bash shell中的Mac终端文件的大量。该脚本将搭配在一起2个版本相同的音频文件的,已处理方式不同,使用SOX声音交流库和-m用于混合)命令。我已经能够为一个简单的搭配组合的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 

因为这个脚本的结果会发生什么事是,它的每一个文件结合与令牌“stairs在台阶上铺”与每一个文件含有“两点清扫”。我只是需要结合起来,前AF01-sweep1.wavAF01-sweep2.wav等等。我不知道是什么命令或登录放到这里告诉bash寻找同名但以“stairs在台阶上铺”和“两点清扫”的区别。我有成千上万的文件,所以使得它处理夫妻脚本是至关重要的。

从来就看周围bash的解决方案,并发现一种叫-NAME,并认为这是能够与像MATCHFIND命令一起使用。不确定,因为我没有正常编程。

+0

一些在[循环切换对文件(https://stackoverflow.com/questions/28725333/looping-over-pairs-of-values-in-bash)的答案是非常相关的,虽然这个问题本身并不是100%的关键点。在问一个新问题之前,您是否尝试搜索重复项? –

+0

顺便说一下,'$ file1'与'“$ file1”'不一样。它有时可能看起来像是有效的,但是当你获得更多有趣的文件名(即带有空格或球体的名称)时,它可能会失败。在所有扩展周围使用引号;考虑通过http://shellcheck.net/ –

回答

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 
+0

运行代码(社区维基,以避免收集rep回答已知的欺骗)。 –

+0

这对我来说非常合适。我可以在“sweep1”和“sweep2”前面使用任何名称,它每次都有效,结果正确。 SoX中的详细模式表示格式正确无问题。 – AndyE

相关问题