我正在尝试使用两个大尺寸文件夹(~7GB)创建补丁。
以下是我的表现:
$ diff -Naurbw . ../other-folder > file.patch
但也许是由于文件大小,补丁没有被创建并且出错:
diff: memory exhausted
我尝试将空间超过15 GB,但问题仍然存在。有人可以帮我解决我应该使用的旗帜吗?
答案 0 :(得分:16)
最近,当我需要区分两个大文件(每个> 5Gb)时,我也遇到过这种情况。
我尝试使用不同选项的'diff',但即使--speed-large-files
也没有效果。其他方法,例如使用xdelta
将文件拆分为较小的文件或按this suggestion对文件进行排序也无济于事。我甚至可以使用非常强大的VM(> 72Gb RAM),但仍然出现memory exhausted
错误。
我最终通过将以下参数添加到sysctl.conf
(sudo vim /etc/sysctl.conf
)来开始工作:
vm.overcommit_memory=1
vm.overcommit_memory
有三个值(0,1,2)并设置内核虚拟内存记帐模式。来自proc(5) man page:
0:启发式过度使用(这是默认值)
1:总是过度使用,从不检查
2:经常检查,永远不要过度使用
要确保参数确实已应用,您可以运行
sudo sysctl -p
完成后别忘了更改此参数!
答案 1 :(得分:1)
尝试 sdiff 这是Linux发行版中的预构建工具。
sdiff a.txt b.txt --output=c.txt
将显示要修改的文件。
这对我来说很有效.............
答案 2 :(得分:1)
bsdiff
速度慢且需要大内存,xdelta
是为大型文件创建较大的增量。
尝试使用HDiffPatch处理大型文件:https://github.com/sisong/HDiffPatch
用法示例:
hdiffz -s-256 [-c-lzma2] old_path new_path out_delta_file
hpatchz old_path delta_file out_new_path