bdiff(1)
Solaris中有命令,该命令允许您将diff(1)
文件大小大于RAM大小(http://docs.oracle.com/cd/E19683-01/806-7612/files-23/index.html)。
Linux中有类似的东西吗?我尝试使用谷歌搜索,但找不到bdiff
在Ubuntu中具有哪个软件包。
bdiff(1)
Solaris中有命令,该命令允许您将diff(1)
文件大小大于RAM大小(http://docs.oracle.com/cd/E19683-01/806-7612/files-23/index.html)。
Linux中有类似的东西吗?我尝试使用谷歌搜索,但找不到bdiff
在Ubuntu中具有哪个软件包。
Answers:
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
从衍生的工具bdiff
。我已经确认该工具仅在Ubuntu中apt-get install bsdiff
。
再次感谢@EvanTeitelman的评论,bsdiff
以上内容是用于二进制文件的diff工具。bsdiff
是二进制diff工具,可以处理大文件。目前尚不清楚有多大。请参见下面的讨论该线程用法的链接。
我认为您也可以使用rdiff来执行此操作。Rdiff能够处理非常大的文件。
创建一个文件的签名:
rdiff signature A sigs.txt
使用生成的签名文件sigs.txt和另一个大文件B创建增量:
rdiff delta sigs.txt B deltaAB.txt
当您只有A和增量文件deltaAB.txt时,Delta包含重新创建文件B所需的所有信息。
要重新创建B,请运行:
rdiff patch A deltaAB.txt B
我发现这篇博客文章的标题为:更好的差异或GNU差异用尽内存时该怎么办(“差异:内存耗尽”),该报告指出4.5GB文件的rdiff仅消耗了约66MB的RAM。
lfhex是用于查看和编辑十六进制,八进制,二进制或ascii文本文件的应用程序。lfhex的主要优势在于它能够处理比系统内存大得多的文件。但是,这是一个GUI工具。
--speed-large-files
标志似乎并不影响GNU diff将文件加载到内存的方式。尝试运行fallocate -l 10G testa; fallocate -l 10G testb && diff --speed-large-files -a testa testb
以确认这一点。(或查看源代码。)
bdiff
替换/sbin/sh
为后,我设法从Heirloom Toolchest 进行了构建/bin/sh
。现在,当我尝试执行它时,我得到了bdiff: Can not execute '/usr/5bin/diff'
。抱歉,我不想安装任何东西/usr/5bin/
。这不是可行的解决方案。这里提到的其他选项对我不起作用,因为我想将差异视为文本。
lfhex -c file1 file2
在两个窗格中都设置了“视图”->“编辑基础”->“ ASCII”之后,对我来说效果很好。