2011-08-24 32 views
7

我需要將一堆mp3文件合併在一起。我知道,只是在做如何在bash中按字母順序合併文件

cat file1.mp3 >> file2.mp3 

似乎工作正常(至少它在我的Zune無論如何回放正確)。

我想運行

cat *.mp3 > merged.mp3 

但因爲身邊有50個單獨的MP3文件,我不想驚訝中途在錯誤的地方文件(這是一個音頻書我不想重新翻錄)。

我通過貓手冊頁閱讀,並找不到通配符運算符的順序是否定義。

如果cat不起作用,有沒有一種簡單的方法(也許使用lsxargs),可能能夠爲我做到這一點?

+0

野生卡擴展是由你的shell執行(如bash)的 – MattH

+2

你知道,如果在bash擴張是按字母順序排列的任何機會? – javanix

+1

播放列表是否不是解決此問題的常用方法? – Flexo

回答

12

你的版本(cat *.mp3 > merged.mp3)應該工作,你會期望。 *.mp3由shell擴展並按字母順序排列。

Bash Reference Manual

字分開後,除非-f選項已定,猛砸掃描字符「*」每個單詞,和「[」「?」。如果出現這些字符中的一個,則將該字視爲模式,並且用與該模式匹配的按字母順序排列的文件名替換。

但是,請注意,如果您有多個文件(或長文件名),將會受到「argument list too long」錯誤的阻礙。

如果出現這種情況,使用find代替:

find . -name "*.mp3" -maxdepth 0 -print0 | sort -z | xargs -0 cat > merged.mp3 

find-print0選項使用一個空字符作爲字段分隔(妥善處理與空格的文件名,如常見的MP3文件),而-zsort-0xargs通知備選分隔符的程序。

獎勵功能:省略-maxdepth 0也包括子目錄中的文件。


但是,合併MP3文件的方法會混淆信息,例如您的ID3標頭和持續時間信息。這會影響更多挑剔玩家的可玩性,例如iTunes(也許?)。

爲了做正確,請參閱「A better way to losslessly join MP3 files」或「What is the best way to merge mp3 files?

+0

這對我很好。我通過了[ [「無損無損合併MP3的更好方法」](http://lyncd.com/2011/03/lossless-combine-mp3s/)]中列出的技術以使ID3 /持續時間數據工作。 – javanix

+0

鏈接中的方法看起來更簡單。我會更新答案。 –

3

嘗試:

ls | sort | xargs cat > merged.mp3 

(反正我不知道,你可以合併mp3文件那樣)

+0

ls將按字母順序排序,除非另有說明。 –