cat 并不合并所有文件格式 - 但合并哪些文件格式?

cat 并不合并所有文件格式 - 但合并哪些文件格式?

在 GNU⁄Linux 中,cat以神奇的方式将文件与作品结合起来——至少对我来说:

cat part_* > /destination/file.xyz

源文件和目标文件具有相同的文件格式对于诸如.oggmpg文本文件之类的格式来说就像一个魅力。但我从其他文件中得到了一些非常有趣的奇怪结果。

  • .flac→ 一切工作正常,除了组合文件显示初始文件的长度,然后沿着所有其他部分播放,同时仍然显示第一个文件的长度(就像当时 CD 上的“隐藏曲目”)

  • .pdfcat→ 退出时不显示错误消息,除了以目标名称显示第一个文件(命令中紧随其后的文件)之外什么也不做,从而基本上以另一个名称保存副本。

问题:除了反复试验之外,还有其他方法可以找出哪些文件格式可以合并cat,哪些不能合并吗?

到目前为止,我已经了解到很大程度上取决于文件中的某些标头格式 - 但后来我想知道:“我认为每个可执行文件都必须以标头开头?!”。

答案1

你问,

除了尝试与错误之外,还有其他方法可以找出哪些文件格式可以与 cat 合并,哪些不能?

在对您写的另一个问题的评论中,

有没有机会告诉我 cat 可能会认为什么是标题,什么不是?

我认为这是根本问题:cat既不知道也不关心文件格式。它需要一个或多个文件并生成一个输出流,该输出流是连续复制源文件的结果。

然后,应用程序负责处理生成的文件,以确定生成的合并文件是否“有意义”。

例如,要合并 PDF 文件,需要使用类似pdftk;简单的串联不起作用。正如您所注意到的,某些类型的数字音乐文件可以串联,但其他类型则不能。在某些情况下,您可能会发现一个播放器可以处理串联文件,但另一个播放器则不能;没有简单的规则。

答案2

你基本上回答了你自己的问题;这取决于文件格式是否有标题。

至于“可执行”... shell 脚本是“可执行的”,shell 知道如何运行它,因为它在第一行中有注释,如果合并两个脚本,您可能会得到有意义的结果。但是,如果将二进制格式的可执行文件(例如 elf)组合起来,它们将无法很好地工作;)

相关内容