Linux中是否有bdiff(1)?


9

bdiff(1)Solaris中有命令,该命令允许您将diff(1)文件大小大于RAM大小(http://docs.oracle.com/cd/E19683-01/806-7612/files-23/index.html)。

Linux中有类似的东西吗?我尝试使用谷歌搜索,但找不到bdiff在Ubuntu中具有哪个软件包。



Answers:


13

bdiff似乎在Linux 上可用(至少作为Heirloom Toolchest的一部分)。

差异

但是,我可能只将常规的旧diff与此开关一起使用:

diff --speed-large-files bigfileA bigfileB

为什么不起作用?

参见@EvanTeitelman的评论,--speed-large-files不影响文件如何加载到内存中。

可以使用以下命令证明/确认不起作用:

fallocate -l 10G testa; fallocate -l 10G testb && \
        diff --speed-large-files -a testa testb

bsdiff

很难确认这一点,但我发现了一个bsdiff从衍生的工具bdiff。我已经确认该工具仅在Ubuntu中apt-get install bsdiff

为什么会起作用?

再次感谢@EvanTeitelman的评论,bsdiff以上内容是用于二进制文件的diff工具。bsdiff是二进制diff工具,可以处理大文件。目前尚不清楚有多大。请参见下面的讨论该线程用法的链接。

迪夫

我认为您也可以使用rdiff来执行此操作。Rdiff能够处理非常大的文件。

  1. 创建一个文件的签名:

    rdiff signature A sigs.txt
    
  2. 使用生成的签名文件sigs.txt和另一个大文件B创建增量:

    rdiff delta sigs.txt B deltaAB.txt
    
  3. 当您只有A和增量文件deltaAB.txt时,Delta包含重新创建文件B所需的所有信息。

    要重新创建B,请运行:

    rdiff patch A deltaAB.txt B
    

为什么有效?

我发现这篇博客文章的标题为:更好的差异或GNU差异用尽内存时该怎么办(“差异:内存耗尽”),该报告指出4.5GB文件的rdiff仅消耗了约66MB的RAM。

lfhex

lfhex是用于查看和编辑十六进制,八进制,二进制或ascii文本文件的应用程序。lfhex的主要优势在于它能够处理比系统内存大得多的文件。但是,这是一个GUI工具。

屏幕截图

                  lfhex的ss]![lfhex的ss

参考文献


尽管并不总是有记录,但是GNU diff允许您-H用作的同义词--speed-large-files

2
bsdiff是二进制diff工具,不是大文件diff工具。

3
不幸的是,该--speed-large-files标志似乎并不影响GNU diff将文件加载到内存的方式。尝试运行fallocate -l 10G testa; fallocate -l 10G testb && diff --speed-large-files -a testa testb以确认这一点。(或查看源代码。)

2
在makefile中bdiff替换/sbin/sh为后,我设法从Heirloom Toolchest 进行了构建/bin/sh。现在,当我尝试执行它时,我得到了bdiff: Can not execute '/usr/5bin/diff'。抱歉,我不想安装任何东西/usr/5bin/。这不是可行的解决方案。这里提到的其他选项对我不起作用,因为我想将差异视为文本。
Christian Pietsch

1
PS:令人惊讶的是,lfhex -c file1 file2在两个窗格中都设置了“视图”->“编辑基础”->“ ASCII”之后,对我来说效果很好。
Christian Pietsch
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.