2017-09-25 4 views
0

Mac端末のbashシェルを使用して多数のファイルをバッチ処理しようとしています。スクリプトは一緒にミックスにSoXはサウンド所ライブラリと-m(ミックス用)コマンドを使用して、異なったを処理された同じオーディオファイル、の2つのバージョンが起こっています。私はこのように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 
このスクリプトの結果として何が起こる

は、それが「SWEEP2」を含むすべてのファイルとトークン「SWEEP1」ですべてのファイルを兼ね備えていることです。 af01-sweep1.wavaf01-sweep2.wavなどと組み合わせるだけでいいです。私は、同じ名前を探すようにbashに伝えたいが、 "sweep1"と "sweep2"の違いで、どのようなコマンドや記号をここに置くべきかわからない。何千ものファイルがあるので、カップルを処理するスクリプトを作成すると、が重要です。

私はbashソリューションを読んで、-NAMEと呼ばれるものを見つけました。これをMATCHまたはFINDのようなコマンドとともに使用できると考えています。私は正常にプログラミングをしないので、わかりません。

+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

(既知の欺瞞に答えるのを担当者を収穫するのを避けるためにコミュニティWiki)を通してコードを実行することを検討してください。 –

+0

これは私にとって完璧に機能しました。私は "sweep1"と "sweep2"の前に任意の名前を使うことができ、毎回正しい結果で動作します。 SoXの冗長モードは、フォーマットが正しいことと問題のないことを示しています。 – AndyE

関連する問題