Как объединить файлы в Bash в алфавитном порядке - PullRequest
7 голосов
/ 24 августа 2011

Мне нужно объединить кучу mp3-файлов. Я знаю, что просто делаю

cat file1.mp3 >> file2.mp3

, кажется, работает нормально (по крайней мере, он все равно воспроизводится правильно на моем Zune).

Я бы хотел запустить

cat *.mp3 > merged.mp3

но так как существует около 50 отдельных mp3-файлов, я не хочу, чтобы наполовину был удивлен файл в неправильном месте (это аудиокнига, которую мне не хочется переписывать).

Я прочитал справочные страницы cat и не смог определить, определен ли порядок оператора подстановки.

Если cat не работает для этого, есть ли простой способ (возможно, с использованием ls и xargs), который мог бы сделать это для меня?

Ответы [ 2 ]

13 голосов
/ 24 августа 2011

Ваша версия (cat *.mp3 > merged.mp3) должна работать так, как вы ожидаете.*.mp3 расширяется оболочкой и будет в алфавитном порядке.

Из Справочного руководства Bash :

После разделения слов, если не установлена ​​опция -f, Bash сканирует каждое слово на наличие символов '*', '?', а также '['.Если появляется один из этих символов, слово считается шаблоном, и заменяется отсортированным по алфавиту списком имен файлов , соответствующих шаблону.

Однако имейте в видучто если у вас много файлов (или длинных имен файлов), вам помешает ошибка " слишком длинный список аргументов ".

Если это произойдет, используйте вместо этого find:

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

Опция -print0 в find использует нулевой символ в качестве разделителей полей (для правильной обработки имен файлов с пробелами, как это обычно происходит с файлами MP3), тогда как -z в sort и-0 в xargs информирует программы альтернативного разделителя.

Бонус: пропустите -maxdepth 0, чтобы также включить файлы в подкаталоги.


Однако этот метод объединения файлов MP3 может испортить такую ​​информацию, как ваши заголовки ID3 и информация о продолжительности.Это повлияет на удобство воспроизведения на более требовательных проигрывателях, таких как iTunes (возможно?).

Чтобы сделать это правильно, см. « Лучший способ без потерь объединить файлы MP3 » или « Чтолучший способ объединить mp3 файлы?"

4 голосов
/ 24 августа 2011

try:

ls | sort | xargs cat > merged.mp3

(Во всяком случае, я не уверен, что вы можете объединить mp3-файлы таким образом)

...