我将两个目录分别为220和sue,如下所示:
diff -r 220 sue > diff.txt
此后目录如下:
$ ls -al
total 20
drwxrwx---+ 1 Administrators Domain Users 0 Jun 24 10:44 .
drwxrwx---+ 1 SYSTEM SYSTEM 0 Jun 24 09:52 ..
drwxrwx---+ 1 Administrators Domain Users 0 Jun 24 09:54 220
-rw-rwxr--+ 1 jempty Domain Users 15463 Jun 24 10:44 diff.txt
drwxrwx---+ 1 Administrators Domain Users 0 Jun 24 09:55 sue
确认diff.txt是如下文本:
$ file diff.txt
diff.txt: HTML document, ASCII text, with very long lines, with CRLF, LF line terminators
上面的内容主要是为了证明我可以使用diff并看到没有太多差异。
然后按照https://docs.moodle.org/dev/How_to_create_a_patch的建议创建补丁文件:
$ diff -Naur 220 sue > patch.txt
目录中的结果如下所示:
$ ls -al
total 133836
drwxrwx---+ 1 Administrators Domain Users 0 Jun 24 10:57 .
drwxrwx---+ 1 SYSTEM SYSTEM 0 Jun 24 09:52 ..
drwxrwx---+ 1 Administrators Domain Users 0 Jun 24 09:54 220
-rw-rwxr--+ 1 jempty Domain Users 15463 Jun 24 10:44 diff.txt
-rw-rwxr--+ 1 jempty Domain Users 137024100 Jun 24 10:57 patch.txt
drwxrwx---+ 1 Administrators Domain Users 0 Jun 24 09:55 sue
如您所见,patch.txt文件非常庞大,事实证明它是二进制文件:
$ file patch.txt
patch.txt: data
我应该使用patch
命令而不是diff
您可以在220
或sue
或两者中都有二进制文件(程序,DLL,数据文件等)。
第一个命令(diff -r
)识别出某些文件是二进制文件,在这种情况下,diff
将仅打印一条消息,说明它们是不同的。例如,如果两个220
并sue
有一个二进制文件foo.dat
在其中,你会期望的输出是这样的:
Binary files 220/foo.dat and sue/foo.dat differ
第二个命令具有-a
标志,该标志指示diff
将所有文件无条件地视为纯文本,因此它将比较和打印220/foo.dat
和之间的差异的原始二进制内容sue/foo.dat
。由于diff
逐行比较,并且二进制文件通常很少有换行符,因此即使输出的文件相对较小,比较并显示在输出中的行也将相当大。
为了减少diff
的输出大小,请不要使用-a
标志:
$ diff -Nur 220 sue > patch.txt
如果您不关心二进制文件之间的差异,则可以过滤输出以排除它们:
$ diff -Nur 220 sue | grep -v '^Binary files.*differ' > patch.txt
要回答您的最后一个问题,patch
是的反义词diff
,因此您将不在patch
这里使用。您用于diff
查找文件之间的差异,并patch
用于将diff
的输出中的差异应用于这些文件。当提及的输出时,这些术语可以互换使用diff
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句