Ваша версия (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 файлы?"