2011-08-24 25 views
7

Necesito unir un montón de archivos mp3. Sé que simplemente haciendoCómo combinar archivos en bash en orden alfabético

cat file1.mp3 >> file2.mp3 

parece funcionar bien (al menos reproduce correctamente en mi Zune de todos modos).

me gustaría correr

cat *.mp3 > merged.mp3 

pero ya que hay alrededor de 50 archivos mp3 separados no quiere ser sorprendido por la mitad de un archivo en el lugar equivocado (este es un libro de audio que No tengo ganas de volver a rasgar).

He leído las páginas man de cat y no he podido encontrar si el orden del operador comodín está definido.

Si cat no funciona para esto, ¿hay alguna manera simple (tal vez usando ls y xargs) que pueda hacer esto por mí?

+0

La expansión comodín se realiza mediante la shell (por ejemplo bash) – MattH

+2

¿Sabe usted si que la expansión en bash es alfabético, por casualidad? – javanix

+1

¿No sería una lista de reproducción la forma habitual de resolver esto? – Flexo

Respuesta

12

Su versión (cat *.mp3 > merged.mp3) debería funcionar como era de esperar. El *.mp3 se expande por el shell y estará en orden alfabético.

Desde el Bash Reference Manual:

Después de la división de palabras, a menos que la opción -f se ha establecido, Bash escanea cada palabra para los caracteres ‘*’, y ‘[’ ‘?’. Si aparece uno de estos caracteres, la palabra se considera un patrón y reemplazado por una lista ordenada alfabéticamente de nombres de archivo que coincida con el patrón.

Sin embargo, tenga en cuenta que si tiene muchos archivos (o nombres de archivos largos) se verá obstaculizado por el error "argument list too long".

Si esto sucede, utilice find lugar:

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

La opción -print0 en find utiliza un carácter nulo como separadores de campo (para manejar adecuadamente los nombres de archivo con espacios, como es común con los archivos MP3), mientras que el -z en sort y -0 en xargs informa los programas del separador alternativo.

Característica adicional: dejar fuera -maxdepth 0 para incluir también los archivos en los subdirectorios.


Sin embargo, ese método de fusión de archivos MP3 podría arruinar información como los encabezados ID3 e información de duración. Eso afectará la jugabilidad de jugadores más exigentes como iTunes (¿quizás?).

para hacerlo correctamente, consulte "A better way to losslessly join MP3 files" o "What is the best way to merge mp3 files?"

+0

Esto funcionó bien para mí. Lo pasé a través de la técnica enumerada en [ ["Una mejor manera de combinar MP3s sin pérdidas"] (http://lyncd.com/2011/03/lossless-combine-mp3s/) para obtener los datos de ID3/duración funcionando. – javanix

+0

Ese método en el enlace ciertamente parece más simple. Actualizaré la respuesta. –

3

intento:

ls | sort | xargs cat > merged.mp3 

(De todos modos no estoy seguro de que puede combinar archivos mp3 de esa manera)

+0

ls ordenará alfabéticamente a menos que se indique lo contrario. –

Cuestiones relacionadas