我需要将一堆mp3文件合并在一起.我知道这只是做
cat file1.mp3 >> file2.mp3
Run Code Online (Sandbox Code Playgroud)
似乎工作正常(至少它在我的Zune上正确播放).
我想跑
cat *.mp3 > merged.mp3
Run Code Online (Sandbox Code Playgroud)
但由于有大约50个单独的mp3文件,我不想在错误的位置中间文件中途感到惊讶(这是一本我不想重新翻录的有声读物).
我通读了cat手册页,无法找到是否定义了通配符操作符的顺序.
如果cat不适用于此,是否有一种简单的方法(也许使用ls和xargs)可以为我做这个?
Sha*_*hin 13
你的版本(cat *.mp3 > merged.mp3)应该按照你的期望工作.它*.mp3由shell扩展,并按字母顺序排列.
从Bash参考手册:
分词后,除非设置了-f选项,否则Bash会扫描每个单词中的字符'*','?'和'['.如果出现其中一个字符,则该单词被视为模式,并替换为与该模式匹配的按字母顺序排列的文件名列表.
但是,请注意,如果您有许多文件(或长文件名),您将受到" 参数列表太长 "错误的阻碍.
如果发生这种情况,请find改用:
find . -name "*.mp3" -maxdepth 0 -print0 | sort -z | xargs -0 cat > merged.mp3
Run Code Online (Sandbox Code Playgroud)
该-print0选项find使用空字符作为字段分隔符(以正确处理带有空格的文件名,这与MP3文件一样),而-zin sort和-0in xargs通知替代分隔符的程序.
奖金功能:省略-maxdepth 0包含子目录中的文件.
但是,合并MP3文件的方法会弄乱诸如ID3标题和持续时间信息之类的信息.这会影响更多挑剔玩家的可玩性,比如iTunes(也许?).
要正确地执行此操作,请参阅" 无损加入MP3文件的更好方法 "或" 合并mp3文件的最佳方式是什么? "
尝试:
ls | sort | xargs cat > merged.mp3
Run Code Online (Sandbox Code Playgroud)
(无论如何,我不确定您是否可以通过这种方式合并 mp3 文件)