2011-08-24 12 views
7

複数のmp3ファイルをマージする必要があります。私は単に アルファベット順にbashでファイルをマージする方法

cat file1.mp3 >> file2.mp3 

は(とにかく、少なくとも、それは私のZune上で正しく再生)正常に動作するようですやっていることを知っています。

私は

cat *.mp3 > merged.mp3 

を実行したいのですが、周りの50の別々のmp3ファイルがあるので、私は間違った場所にあるファイルによって途中で驚くことにしたくない(これはつまり、オーディオブックです私はリッピングする気がしません)。

ワイルドカード演算子の順序が定義されていれば、catのマニュアルページを読んだところ、見つからなかった。

catはこのために動作しない場合は、私のためにこれを行うことができるかもしれない(おそらくlsxargsを使用して)簡単な方法はありますか?

+0

ワイルドカード拡張を行ってそれを正しく行うために(例えばbashの) – MattH

+2

はbashでその拡大が万が一のアルファベットであれば、あなたは知っていますか? – javanix

+1

プレイリストはこれを解決する通常の方法ではありませんか? – Flexo

答えて

12

あなたのバージョン(cat *.mp3 > merged.mp3)が動作するはずです。 *.mp3はシェルによって展開され、アルファベット順に表示されます。 Bash Reference Manualから

:単語の分割後

、-fオプションが設定されていない限り、バッシュは、文字「*」のそれぞれの単語をスキャンし、「[」「?」。これらの文字のいずれかが表示された場合、その単語はパターンとみなされ、は、パターンに一致するファイル名のアルファベット順ソートリストに置き換えられます。

しかし、多くのファイル(または長いファイル名)がある場合は、「argument list too long」というエラーが発生する可能性があることに注意してください。

その場合は、代わりにfindを使用します。

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

を(MP3ファイルと一般的であるように、適切にスペースを含むファイル名を処理するために)find-print0オプションは、フィールドセパレータとしてヌル文字を使用して、-zながら、 および-0xargsに置き換えると、代替セパレータのプログラムに通知されます。

ボーナス機能:-maxdepth 0には、サブディレクトリにもファイルが含まれていません。


しかし、MP3ファイルをマージする方法では、ID3ヘッダーや期間情報などの情報が混乱します。それは、iTunesなど多彩なプレイヤーのプレイアビリティに影響します(おそらく?)。

は、「A better way to losslessly join MP3 files」を参照するか、シェルで「What is the best way to merge mp3 files?

+0

これは私のためにうまくいった。私はID3/durationデータを取得するために[ ["MP3を無損失でマージするより良い方法"](http://lyncd.com/2011/03/lossless-combine-mp3s/)に記載されているテクニックを通過しました。 – javanix

+0

リンク内のそのメソッドは確かに簡単に見えます。私は答えを更新します。 –

3

試してください:あなたが期待するよう

ls | sort | xargs cat > merged.mp3 

(とにかく私はあなたがmp3がそのようにファイルをマージすることができていることはよく分からない)

+0

lsは、特に指示がない限り、アルファベット順にソートされます。 –

関連する問題