'\" te .\" Copyright 1989 AT&T .\" Copyright (c) 2004, 2010, Oracle and/or its affiliates.All rights reserved. .\" Portions Copyright (c) 1992, X/Open Company Limited All Rights Reserved. .\" Sun Microsystems, Inc. gratefully acknowledges The Open Group for permission to reproduce portions of its copyrighted documentation.Original documentation from The Open Group can be obtained online at http://www.opengroup.org/bookstore/. .\" The Institute of Electrical and Electronics Engineers and The Open Group, have given us permission to reprint portions of their documentation.In the following statement, the phrase "this text" refers to portions of the system documentation.Portions of this text are reprinted and reproduced in electronic form in the Sun OS Reference Manual, from IEEE Std 1003.1, 2004 Edition, Standard for Information Technology -- Portable Operating System Interface (POSIX), The Open Group Base Specifications Issue 6, Copyright (C) 2001-2004 by the Institute of Electrical and Electronics Engineers, Inc and The Open Group.In the event of any discrepancy between these versions and the original IEEE and The Open Group Standard, the original IEEE and The Open Group Standard is the referee document.The original Standard can be obtained online at http://www.opengroup.org/unix/online.html.This notice shall appear on any product containing this material. .TH diff 1 "2010 年 11 月 19 日" "SunOS 5.11" "用户命令" .SH 名称 diff \- 比较两个文件 .SH 用法概要 .LP .nf \fBdiff\fR [\fB-bitw\fR] [\fB-c\fR | \fB-e\fR | \fB-f\fR | \fB-h\fR | \fB-n\fR | \fB-u\fR] \fIfile1\fR \fIfile2\fR .fi .LP .nf \fBdiff\fR [\fB-bitw\fR] [\fB-C\fR \fInumber\fR | \fB-U\fR \fInumber\fR] \fIfile1\fR \fIfile2\fR .fi .LP .nf \fBdiff\fR [\fB-bitw\fR] [\fB-D\fR \fIstring\fR] \fIfile1\fR \fIfile2\fR .fi .LP .nf \fBdiff\fR [\fB-bitw\fR] [\fB-c\fR | \fB-e\fR | \fB-f\fR | \fB-h\fR | \fB-n\fR | \fB-u\fR] [\fB-l\fR] [\fB-r\fR] [\fB-s\fR] [\fB-S\fR \fIname\fR] \fIdirectory1\fR \fIdirectory2\fR .fi .SH 描述 .sp .LP \fBdiff\fR 实用程序可比较 \fIfile1 \fR 与 \fIfile2\fR 的内容,并向标准输出写入将 \fIfile1\fR 转换为 \fIfile2\fR 所必需的一组更改。此列表包括最低限度的差异。除了在罕见的情形中以外,\fBdiff\fR 会找到最低限度的足够的文件差异。如果文件完全相同,则不会有任何输出。 .sp .LP 常规输出包含三种形式的行: .sp .in +2 .nf \fIn1\fR \fBa\fR \fIn3,n4\fR \fIn1,n2\fR \fBd\fR \fIn3\fR \fIn1,n2\fR \fBc\fR \fIn3,n4\fR .fi .in -2 .sp .sp .LP 其中 \fIn1\fR 和 \fIn2\fR 代表 \fIfile1\fR 中的行,\fIn3\fR 和 \fIn4\fR 代表 \fIfile2\fR 中的行。这些行比较 \fBed\fR(1) 命令以将 \fIfile1\fR 转换为 \fIfile2\fR。通过用 \fBa\fR 交换 \fBd\fR 并向后读取,可将 \fIfile2\fR 转换为 \fIfile1\fR。像在 \fBed\fR 中一样,完全相同的对(其中 \fIn1\fR=\fI n2\fR 或者 \fIn3\fR=\fIn4\fR)被缩写成一个数字。 .sp .LP 在其中的每个行后面是 \fB<\fR 标记的第一个文件中受影响的所有行,然后是 \fB> \fR 标记的第二个文件中受影响的所有行。 .SH 选项 .sp .LP 支持以下选项: .sp .ne 2 .mk .na \fB\fB-b\fR\fR .ad .RS 6n .rt 忽略结尾空白(空格或制表符),并将其他空白字符串视为等效。 .RE .sp .ne 2 .mk .na \fB\fB-i\fR\fR .ad .RS 6n .rt 忽略字母大小写。例如,\fBA\fR 比较等同于 \fBa\fR。 .RE .sp .ne 2 .mk .na \fB\fB-t\fR\fR .ad .RS 6n .rt 扩展输出文件中的 TAB 字符。常规或 \fB-c\fR 输出将字符添加到每行的前面,这可能会对原来的源行的缩排产生不利影响,使得输出行难以解释。此选项保留原来的源的缩排。 .RE .sp .ne 2 .mk .na \fB\fB-w\fR\fR .ad .RS 6n .rt 忽略所有空白(SPACE 和 TAB 字符),并将其他所有空白字符串视为等效。例如,`\fBif ( a = = b )\fR' 比较等同于 `\fBif(a= =b)\fR'。 .RE .sp .LP 以下选项是互斥的: .sp .ne 2 .mk .na \fB\fB-c\fR\fR .ad .RS 13n .rt 产生一个差异列表以及三行上下文。使用此选项时,会对输出格式进行少量更改。即,输出的开头会指示涉及的文件及其创建日期,每个更改用一个带星号 \fB*\fR 的行分隔。从 \fIfile1\fR 中删除的行带 — 标记。添加到 \fIfile2\fR 的行带 + 标记。从一个文件更改到另一个文件的行在两个文件中都带 ! 标记。 .RE .sp .ne 2 .mk .na \fB\fB-C\fR \fInumber\fR\fR .ad .RS 13n .rt 产生的差异列表与 \fB-c\fR 产生的完全相同,但包含 \fInumber\fR 行上下文。 .RE .sp .ne 2 .mk .na \fB\fB-D\fR \fIstring\fR\fR .ad .RS 13n .rt 创建一个合并版的 \fIfile1\fR 和 \fIfile2\fR,并包含 C 预处理程序控制,因此在不定义 \fIstring\fR 的情况下编译结果等效于编译 \fIfile1\fR,如果同时定义 \fIstring\fR,则可获得 \fIfile2\fR。 .RE .sp .ne 2 .mk .na \fB\fB-e\fR\fR .ad .RS 13n .rt 为编辑器 \fBed\fR 生成一个仅包含 \fBa\fR、\fBc\fR 和 \fBd\fR 命令的脚本,该脚本可根据 \fIfile1\fR 重新创建 \fIfile2\fR。结合使用 \fB-e\fR 选项,以下 shell 程序可以帮助维护一个文件的多个版本。只需要有一个祖先文件 ($1) 和一个由 \fBdiff\fR 生成的表示版本间差异的 \fBed\fR 脚本链 ($2,$3,...)。最新版本就会显示在标准输出上。 .sp .in +2 .nf (shift; cat $*; echo a\'1,$p') | ed \(mi $1 .fi .in -2 .sp .RE .sp .ne 2 .mk .na \fB\fB-f\fR\fR .ad .RS 13n .rt 按相反顺序生成类似的脚本(不与 \fBed\fR 结合使用)。 .RE .sp .ne 2 .mk .na \fB\fB-h\fR\fR .ad .RS 13n .rt 进行快速的常规作业。 .sp 此选项仅适合更改的片段很短并且分离出来的情况。它对长度无限的文件无效。 .sp 只有 -\fB-b\fR 可与 \fB-h\fR 一起使用。 .sp 使用此选项时,\fBdiff\fR 不会深入到目录。 .RE .sp .ne 2 .mk .na \fB\fB-n\fR\fR .ad .RS 13n .rt 产生一个类似于 \fB-e\fR 的脚本,但采用相反的顺序,并对每个插入或删除命令进行更改行计数。 .RE .sp .ne 2 .mk .na \fB\fB-u\fR\fR .ad .RS 13n .rt 产生一个差异列表以及三行上下文。输出类似于 \fB-c\fR 选项的输出,但上下文是“统一的”。\fIfile1\fR 中删除和更改的行加上标记 \fB-\fR,\fIfile2\fR 中增加或更改的行加上标记 \fB+\fR。输出中会显示两个版本的更改行,但添加、删除和上下文行仅出现一次。\fIfile1\fR 和 \fIfile2\fR 的标识方法不同:使用 \fB-c\fR 选项时显示 “\fB***\fR” 和 “\fB---\fR” 的位置会列显 “\fB---\fR” 和 “\fB+++\fR”。每项更改都用以下形式的一行单独显示: .sp .in +2 .nf \fB@@ -\fIn1\fR,\fIn2\fR +\fIn3\fR,\fIn4\fR @@\fR .fi .in -2 .sp .RE .sp .ne 2 .mk .na \fB\fB-U\fR \fInumber\fR\fR .ad .RS 13n .rt 产生的差异列表与 \fB-u\fR 产生的完全相同,但包含 \fInumber\fR 行上下文。 .RE .sp .LP 以下选项用于比较目录: .sp .ne 2 .mk .na \fB\fB-l\fR\fR .ad .RS 11n .rt 产生长格式的输出。在执行 \fBdiff\fR 之前,每个文本文件通过 \fBpr\fR(1) 进行分页。会记录其他差异并在报告了所有文本文件差异后汇总这些差异。 .RE .sp .ne 2 .mk .na \fB\fB-r\fR\fR .ad .RS 11n .rt 以递归方式将 \fBdiff\fR 应用于遇到的共用子目录。 .RE .sp .ne 2 .mk .na \fB\fB-s\fR\fR .ad .RS 11n .rt 报告完全相同的文件。这些完全相同的文件不会再提及。 .RE .sp .ne 2 .mk .na \fB\fB-S\fR \fIname\fR\fR .ad .RS 11n .rt 在中间开始对目录执行 \fBdiff\fR,以文件名 \fIname\fR 开始。 .RE .SH 操作数 .sp .LP 支持下列操作数: .sp .ne 2 .mk .na \fB\fIfile1\fR\fR .ad .br .na \fB\fIfile2 \fR\fR .ad .RS 15n .rt 要比较的文件或目录的路径名。如果 \fIfile1\fR 或 \fIfile2\fR 为 \fB-\fR,则在其位置使用标准输入。 .RE .sp .ne 2 .mk .na \fB\fIdirectory1\fR\fR .ad .br .na \fB\fI directory2\fR\fR .ad .RS 15n .rt 要比较的目录的路径名。 .RE .sp .LP 如果 \fIfile1\fR 和 \fIfile2\fR 中只有一个是目录,则 \fBdiff\fR 将应用于非目录文件以及目录文件中文件名与非目录文件最后一个组成部分相同的文件。 .SH 用法 .sp .LP 有关 \fBdiff\fR 遇到大于或等于 2 GB(2^31 字节)文件时行为的说明,请参见 \fBlargefile\fR(5)。 .SH 示例 .LP \fB示例 1 \fR使用 \fBdiff\fR 命令 .sp .LP 在以下命令中,\fBdir1\fR 是一个包含目录 \fBx\fR 的目录,\fBdir2\fR 是一个包含目录 \fBx\fR、\fBdir1/x\fR 和 \fBdir2/x\fR 的目录,两者都包含文件 \fBdate.out\fR,\fBdir2/x\fR 包含文件 \fBy\fR: .sp .in +2 .nf example% \fBdiff -r dir1 dir2\fR Common subdirectories: dir1/x and dir2/x Only in dir2/x: y diff -r dir1/x/date.out dir2/x/date.out 1c1 < Mon Jul 2 13:12:16 PDT 1990 --- > Tue Jun 19 21:41:39 PDT 1990 .fi .in -2 .sp .SH 环境变量 .sp .LP 有关影响 \fBdiff\fR 执行的以下环境变量的说明,请参见 \fBenviron\fR(5):\fBLANG\fR、\fBLC_ALL\fR、\fBLC_CTYPE\fR、\fBLC_MESSAGES\fR、\fBLC_TIME\fR 和 \fBNLSPATH\fR。 .sp .ne 2 .mk .na \fB\fBTZ\fR\fR .ad .RS 6n .rt 确定语言环境,该设置影响使用 \fB-C\fR 和 \fB-c\fR 选项时用于计算写入的文件时间戳的时区。 .RE .SH 退出状态 .sp .LP 将返回以下退出值: .sp .ne 2 .mk .na \fB\fB0\fR\fR .ad .RS 6n .rt 未找到差异。 .RE .sp .ne 2 .mk .na \fB\fB1\fR\fR .ad .RS 6n .rt 找到了差异。 .RE .sp .ne 2 .mk .na \fB\fB>1\fR\fR .ad .RS 6n .rt 出现错误。 .RE .SH 文件 .sp .ne 2 .mk .na \fB\fB/tmp/d?????\fR\fR .ad .RS 18n .rt 用于比较的临时文件 .RE .sp .ne 2 .mk .na \fB\fB/usr/lib/diffh\fR\fR .ad .RS 18n .rt 用于 \fB-h\fR 选项的可执行文件 .RE .SH 属性 .sp .LP 有关下列属性的说明,请参见 \fBattributes\fR(5): .sp .sp .TS tab() box; cw(2.75i) |cw(2.75i) lw(2.75i) |lw(2.75i) . 属性类型属性值 _ 可用性system/core-os _ CSIEnabled(已启用) _ 接口稳定性Committed(已确定) _ 标准请参见 \fBstandards\fR(5)。 .TE .SH 另请参见 .sp .LP \fBbdiff\fR(1)、\fBcmp\fR(1)、\fBcomm\fR(1)、\fBdircmp\fR(1)、\fBed\fR(1)、\fBpr\fR(1)、\fBsdiff\fR(1)、\fBattributes\fR(5)、\fBenviron\fR(5)、\fBlargefile\fR(5)、\fBstandards\fR(5) .SH 附注 .sp .LP 使用 \fB-e\fR 或 \fB-f\fR 选项产生的编辑脚本在创建包含单个句点 (\fB\&.\fR) 的行方面还不成熟。 .sp .LP 在文件结尾缺少换行符表示相关文件的最后一行没有换行符。如果行不同,则会对其标记并输出,但输出似乎会指示行相同。