2016-07-23 10 views
1
for f in ./*.mp3; do sox "$f" "${f%%.mp3}processed.mp3" silence 1 0.02 1% -1 0.02 1%; done 

これは私がオーディオファイルを処理するために使用しているスクリプトです。問題は、新しいオーディオファイルも同様にループ処理し続けることです。私は、出力がサブフォルダに行くことによってこの問題を解決したいと思いますので、私はこれを試してみました:バッチスクリプトの先頭の「./」を削除します

for f in ./*.mp3; do sox "$f" "/subfolder${f%%.mp3}processed.mp3" silence 1 0.02 1% -1 0.02 1%; done 

これが出力されます:

/subfolder./01processed.mp3 

これは私のソックスとの誤差を与えている、私はファイル名の出力の前に./を削除する必要がありますが、どうすればよいでしょうか?これは私がしたいのですが出力されます:あなたは取り除くことができ

/subfolder/01processed.mp3 

答えて

1
for f in *.mp3; do sox "$f" "/subfolder/${f%%.mp3}processed.mp3" silence 1 0.02 1% -1 0.02 1%; done 
+0

私はそれを試みましたが、それはまだ動作しませんでしたが、先頭の "。"今それは動作します。 'do sox "$ f" "./subfolder/${f%%.mp3}processed.mp3"サイレンス1 0.02 1%-1 0.02 1%; done ' – Marw

+0

@Marw "。"を追加せず、 "/"を削除します(つまり、サブフォルダ/ $ {f %%。mp3} processed.mp3 "'を使用します)。 –

0
for f in ./*.mp3; do 
    out=${f#./} 
    out=${out%%.mp3}processed.mp3 
    sox "$f" "/subfolder/$out" silence 1 0.02 1% -1 0.02 1% 
done 

両方./を先頭とmp3末尾が、パラメータ展開は(一度に1つずつを、彼らがすることができます行われる必要があります」 t入れ子にする)。 の場合、先頭の文字は.で、出力パスを作成するときは/のままにしておきますが、それを取り出して明示的に戻す方がはっきりしています。 (/subfolder$outが、それはクリアファイルではなくsubfolder$outという名前のファイル/フォルダを作るよりも、subfolderという名前のフォルダに置かれていることを確認しません。)

それがファイルで動作しますので、ちなみに、for f in ./*.mp3は、最も正しいバージョンであります-で始まる。そうでなければ、soxはオプションの入力ファイル名を間違えることがあります。

+0

実際には何も削除する必要はありません。 'サブフォルダ/./file'は完璧です –

関連する問題