Как объединить файлы в bash в алфавитном порядке
Мне нужно объединить кучу mp3-файлов вместе. Я знаю, что просто делаю
cat file1.mp3 >> file2.mp3
, кажется, работает нормально (по крайней мере, он воспроизводит правильно на моем Zune в любом случае).
Я хотел бы бежать
cat *.mp3 > merged.mp3
Но поскольку существует около 50 отдельных mp3-файлов, я не хочу быть удивленным на полпути к файлу в неправильном месте (это аудиокнига, которую я не хочу повторно разрывать).
Я прочитал страницы cat man и не смог найти, соответствует ли порядок подстановочных знаков оператор определен.
Если cat
не работает для этого, есть ли простой способ (возможно, используя ls
и xargs
), который мог бы сделать это для меня?
2 ответа:
Ваша версия (
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-файлы? "