我想生成delta文件,即。包含2个文件之间的更改的文件,这些文件很小。
但是,当我使用-u格式运行diff实用程序来创建统一格式的diff文件时,文件大小太大。
我有2个文本文件,其内容如下所示
1.txt:“hello1234”
2.txt:“hello5678”
运行“diff -u 1.txt 2.txt”时,生成的diff文件为182字节,如下所示:
--- 1.txt 2014-05-12 03:54:58.000000000 -0400
+++ 2.txt 2014-05-12 03:55:03.000000000 -0400
@@ -1 +1 @@
-hello1234
\文件末尾没有换行符
+ hello5678
\文件末尾没有换行符
与只有9个字节的原始文件相比,这是巨大的。
是否有一个实用程序或其他方法生成比源文件小的diff文件(例如svn / git实用程序)?
目的是在文件更新的情况下通过网络传输这些增量文件,而不是传输整个文件本身。
答案 0 :(得分:0)
如果你想要小" delta"文件,不要使用diff / patch它们并不是真正意义上的用途(特别是diff -u
,正常模式稍微简洁一些)。
您应该使用xdelta,bsdiff或类似的东西(即二进制导向)。面向字符的文本差异可能比简单diff
更好。
有些情况下,无法比重复整个文件更有效地表达更改(某些文件包含具有不可预测位置的高密度更改)。你的情况是这样的,好消息是典型案例确实比这更好,即使在数据库或复杂的源代码上也是如此。
有很多情况下delta不起作用:加密或压缩文件。在这种情况下,应该在解密/解压缩版本上计算文件增量。