我正在比较两个目录 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
答案1
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
。