2016-07-23 26 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

我試過了,但它仍然沒有工作,但通過添加一個前導「。」。現在它工作。 'so sox「$ f」「./subfolder/${f%%.mp3}processed.mp3」沉默1 0.02 1%-1 0.02 1%;完成' – 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,但參數擴展需要做一次一個(他們能夠」不能嵌套)。你可能剝離只有領導.並保留/當你建立輸出路徑,但它更清楚地把它拿出來,明確地放回去。 (/subfolder$out沒有說清楚,一個文件被放在一個名爲subfolder,而不是讓一個名爲subfolder$out文件/文件夾的文件夾中)。

順便說一句,for f in ./*.mp3是最正確的版本,因爲它會使用文件以-開頭;否則,sox可能會錯誤輸入文件名稱作爲選項。

+0

你實際上不必刪除任何東西。 '子文件夾/./文件'非常好 –