如何在 Linux 上区分大文件

Tom*_*m B 38 linux diff

diff: memory exhausted在尝试比较两个 27 GB 文件时出现错误,这些文件在具有 CentOS 5 和 4 GB RAM 的 Linux 机器上非常相似。这似乎是一个已知问题。

我希望这种基本实用程序有替代方案,但我找不到。我想该解决方案必须使用临时文件而不是内存来存储它需要的信息。

  • 我尝试使用rdiffand xdelta,但它们更适合显示两个文件之间的更改,例如补丁,并且对于检查两个文件之间的差异没有那么有用。
  • 尝试过VBinDiff,但它是一个可视化工具,更适合比较二进制文件。我需要一些可以像常规diff.
  • 还有许多其他实用程序,例如vimdiff仅适用于较小文件的实用程序。
  • 我也读过有关 Solaris 的文章,bdiff但找不到适用于 Linux 的端口。

除了将文件分成更小的部分之外还有什么想法吗?我有 40 个这样的文件,所以尽量避免将它们分解。

小智 13

cmp逐字节执行操作,因此它可能不会耗尽内存(仅在两个 7 GB 文件上对其进行了测试)——但您可能正在寻找比“文件XY字节不同的列表”更多的细节x,第y行”。如果您的文件的相似性是偏移的(例如,文件Y具有相同的文本块,但不在同一位置),您可以将偏移量传递给cmp; 你可以把它变成一个小脚本的重新同步比较。

旁白:万一其他人在寻找一种方法来确认两个目录结构(包含非常大的文件)是相同的:( diff --recursive --briefdiff -r -q简而言之,甚至可能diff -rq)将工作并且不会耗尽内存。

  • 很好,我认为 -q 是这里的关键,不知何故没有它可能需要 diff 将整个文件(或至少整行)放入内存中...... (2认同)

Jar*_*vin 6

我找到了这个链接

diff -H 可能会有所帮助,或者您可以尝试安装 textproc/2bsd-diff 端口,该端口显然不会尝试将文件加载到 RAM 中,因此它可以更轻松地处理大文件。

我不确定您是否尝试过这两个选项,或者它们是否适合您。祝你好运。

  • 对于任何想知道的人:`diff -H` 是`diff --speed-large-files` 的未记录且不推荐使用的别名。 (16认同)