我有两个 PDF 文件,在查看或打印时看起来相同,但diff
实际上它们是二进制文件且不同。我如何找出它们之间的区别?
我更喜欢可以在 Mac OS X 或 OpenSUSE 上运行的答案。
答案1
首先,我会尝试strings
这些文件并通过管道传输它,grep "rdf"
看看会出现什么结果。
strings x.pdf | grep "rdf"
答案2
在支持外壳中流程替代(见于Q317819),diff
可以给出任何生成文本表示的命令的输出 - 例如exiftool
:
diff -u <(exiftool -a -v one.pdf) <(exiftool -a -v two.pdf)
斯蒂芬的建议strings
也生成一个文本表示,并且可以以相同的方式使用:
diff -u <(strings one.pdf) <(strings two.pdf)
exiftool
或的输出strings
相对可读,但不代表整个文件。 exiftool
仅显示元数据,并且strings
仅显示 4 个或更多字节的有效 ASCII 文本的摘录;不会找到既未被识别为元数据又未被识别为 ASCII 字符串的差异。可以使用 制作不可读但完整的文本表示od
:
diff -u <(od -vcw one.pdf) <(od -vcw two.pdf)
(如果od
没有,可以使用hexdump
或hexcat
;来制作更难读但仍然完整的文本表示麦金塔,GNU 实现可能od
被安装为god
。并非所有实现都支持相同的选项。)
查看所有差异并了解尽可能多的差异的含义的最佳方法显然是对相同的两个文件分别使用这两种方法。
我相信除了 Windows 之外的每个现代桌面操作系统都默认安装了一个支持进程替换的 shell;Windows 有几种这样的 shell 可用,但你必须经过一些困难才能使它们正常工作。