2017-09-25 31 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

相關問題