8

我需要将一堆 mp3 文件合并在一起。我知道这只是做

cat file1.mp3 >> file2.mp3

似乎工作正常(至少它在我的 Zune 上正确播放)。

我想跑步

cat *.mp3 > merged.mp3

但由于大约有 50 个单独的 mp3 文件,我不想在中途被错误位置的文件感到惊讶(这是一本我不想重新翻录的有声读物)。

我通读了 cat 手册页,但找不到通配符运算符的顺序是否已定义。

如果cat对此不起作用,是否有一种简单的方法(可能使用lsand xargs)可以为我做到这一点?

4

2 回答 2

15

您的版本 ( cat *.mp3 > merged.mp3) 应该可以按预期工作。由*.mp3外壳扩展,并将按字母顺序排列。

来自Bash 参考手册

分词后,除非设置了 -f 选项,否则 Bash 会扫描每个单词中的字符“*”、“?”和“[”。如果出现这些字符之一,则该词被视为一个模式,并替换为按字母排序的与该模式匹配的文件名列表。

但是,请注意,如果您有很多文件(或长文件名),您将受到“参数列表太长”错误的阻碍。

如果发生这种情况,请find改用:

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

-print0in 选项使用find空字符作为字段分隔符(以正确处理带有空格的文件名,这在 MP3 文件中很常见),而-zinsort-0inxargs则通知程序备用分隔符。

额外功能:省略-maxdepth 0也包括子目录中的文件。


但是,这种合并 MP3 文件的方法会弄乱您的 ID3 标题和持续时间信息等信息。这将影响更挑剔的播放器的可玩性,例如 iTunes(也许?)。

要正确执行此操作,请参阅“无损加入 MP3 文件的更好方法”或“合并 mp3 文件的最佳方法是什么?

于 2011-08-24T14:17:09.760 回答
5

尝试:

ls | sort | xargs cat > merged.mp3

(无论如何,我不确定您是否可以那样合并 mp3 文件)

于 2011-08-24T13:55:49.073 回答