2004-11-03 13:51:07 +00:00
|
|
|
.\" Copyright (c) 2001-2003 The Open Group, All Rights Reserved
|
2007-06-20 22:33:04 +00:00
|
|
|
.TH "DIFF" 1P 2003 "IEEE/The Open Group" "POSIX Programmer's Manual"
|
2004-11-03 13:51:07 +00:00
|
|
|
.\" diff
|
2007-09-20 06:03:25 +00:00
|
|
|
.SH PROLOG
|
|
|
|
This manual page is part of the POSIX Programmer's Manual.
|
|
|
|
The Linux implementation of this interface may differ (consult
|
|
|
|
the corresponding Linux manual page for details of Linux behavior),
|
|
|
|
or the interface may not be implemented on Linux.
|
2004-11-03 13:51:07 +00:00
|
|
|
.SH NAME
|
|
|
|
diff \- compare two files
|
|
|
|
.SH SYNOPSIS
|
|
|
|
.LP
|
|
|
|
\fBdiff\fP \fB[\fP\fB-c| -e| -f| -C\fP \fIn\fP\fB][\fP\fB-br\fP\fB]\fP
|
|
|
|
\fIfile1 file2\fP
|
|
|
|
.SH DESCRIPTION
|
|
|
|
.LP
|
|
|
|
The \fIdiff\fP utility shall compare the contents of \fIfile1\fP and
|
|
|
|
\fIfile2\fP and write to standard output a list of
|
|
|
|
changes necessary to convert \fIfile1\fP into \fIfile2\fP. This list
|
|
|
|
should be minimal. No output shall be produced if the files
|
|
|
|
are identical.
|
|
|
|
.SH OPTIONS
|
|
|
|
.LP
|
|
|
|
The \fIdiff\fP utility shall conform to the Base Definitions volume
|
|
|
|
of IEEE\ Std\ 1003.1-2001, Section 12.2, Utility Syntax Guidelines.
|
|
|
|
.LP
|
|
|
|
The following options shall be supported:
|
|
|
|
.TP 7
|
|
|
|
\fB-b\fP
|
|
|
|
Cause any amount of white space at the end of a line to be treated
|
|
|
|
as a single <newline> (that is, the white-space
|
|
|
|
characters preceding the <newline> are ignored) and other strings
|
|
|
|
of white-space characters, not including <newline>s,
|
|
|
|
to compare equal.
|
|
|
|
.TP 7
|
|
|
|
\fB-c\fP
|
|
|
|
Produce output in a form that provides three lines of context.
|
|
|
|
.TP 7
|
|
|
|
\fB-C\ n\fP
|
|
|
|
Produce output in a form that provides \fIn\fP lines of context (where
|
|
|
|
\fIn\fP shall be interpreted as a positive decimal
|
|
|
|
integer).
|
|
|
|
.TP 7
|
|
|
|
\fB-e\fP
|
|
|
|
Produce output in a form suitable as input for the \fIed\fP utility,
|
|
|
|
which can then be used
|
|
|
|
to convert \fIfile1\fP into \fIfile2\fP.
|
|
|
|
.TP 7
|
|
|
|
\fB-f\fP
|
|
|
|
Produce output in an alternative form, similar in format to \fB-e\fP,
|
|
|
|
but not intended to be suitable as input for the \fIed\fP utility,
|
|
|
|
and in the opposite order.
|
|
|
|
.TP 7
|
|
|
|
\fB-r\fP
|
|
|
|
Apply \fIdiff\fP recursively to files and directories of the same
|
|
|
|
name when \fIfile1\fP and \fIfile2\fP are both
|
|
|
|
directories.
|
|
|
|
.sp
|
|
|
|
.SH OPERANDS
|
|
|
|
.LP
|
|
|
|
The following operands shall be supported:
|
|
|
|
.TP 7
|
|
|
|
\fIfile1\fP,\ \fIfile2\fP
|
|
|
|
A pathname of a file to be compared. If either the \fIfile1\fP or
|
2007-09-20 06:36:16 +00:00
|
|
|
\fIfile2\fP operand is \fB'-'\fP, the standard input
|
2004-11-03 13:51:07 +00:00
|
|
|
shall be used in its place.
|
|
|
|
.sp
|
|
|
|
.LP
|
|
|
|
If both \fIfile1\fP and \fIfile2\fP are directories, \fIdiff\fP shall
|
|
|
|
not compare block special files, character special
|
|
|
|
files, or FIFO special files to any files and shall not compare regular
|
|
|
|
files to directories. Further details are as specified in
|
|
|
|
Diff Directory Comparison Format . The behavior of \fIdiff\fP on other
|
|
|
|
file types is
|
|
|
|
implementation-defined when found in directories.
|
|
|
|
.LP
|
|
|
|
If only one of \fIfile1\fP and \fIfile2\fP is a directory, \fIdiff\fP
|
|
|
|
shall be applied to the non-directory file and the file
|
|
|
|
contained in the directory file with a filename that is the same as
|
|
|
|
the last component of the non-directory file.
|
|
|
|
.SH STDIN
|
|
|
|
.LP
|
|
|
|
The standard input shall be used only if one of the \fIfile1\fP or
|
|
|
|
\fIfile2\fP operands references standard input. See the
|
|
|
|
INPUT FILES section.
|
|
|
|
.SH INPUT FILES
|
|
|
|
.LP
|
|
|
|
The input files may be of any type.
|
|
|
|
.SH ENVIRONMENT VARIABLES
|
|
|
|
.LP
|
|
|
|
The following environment variables shall affect the execution of
|
|
|
|
\fIdiff\fP:
|
|
|
|
.TP 7
|
|
|
|
\fILANG\fP
|
|
|
|
Provide a default value for the internationalization variables that
|
|
|
|
are unset or null. (See the Base Definitions volume of
|
|
|
|
IEEE\ Std\ 1003.1-2001, Section 8.2, Internationalization Variables
|
|
|
|
for
|
|
|
|
the precedence of internationalization variables used to determine
|
|
|
|
the values of locale categories.)
|
|
|
|
.TP 7
|
|
|
|
\fILC_ALL\fP
|
|
|
|
If set to a non-empty string value, override the values of all the
|
|
|
|
other internationalization variables.
|
|
|
|
.TP 7
|
|
|
|
\fILC_CTYPE\fP
|
|
|
|
Determine the locale for the interpretation of sequences of bytes
|
|
|
|
of text data as characters (for example, single-byte as
|
|
|
|
opposed to multi-byte characters in arguments and input files).
|
|
|
|
.TP 7
|
|
|
|
\fILC_MESSAGES\fP
|
|
|
|
Determine the locale that should be used to affect the format and
|
|
|
|
contents of diagnostic messages written to standard error and
|
|
|
|
informative messages written to standard output.
|
|
|
|
.TP 7
|
|
|
|
\fILC_TIME\fP
|
|
|
|
Determine the locale for affecting the format of file timestamps written
|
|
|
|
with the \fB-C\fP and \fB-c\fP options.
|
|
|
|
.TP 7
|
|
|
|
\fINLSPATH\fP
|
|
|
|
Determine the location of message catalogs for the processing of \fILC_MESSAGES
|
|
|
|
\&.\fP
|
|
|
|
.TP 7
|
|
|
|
\fITZ\fP
|
|
|
|
Determine the timezone used for calculating file timestamps written
|
|
|
|
with the \fB-C\fP and \fB-c\fP options. If \fITZ\fP is
|
|
|
|
unset or null, an unspecified default timezone shall be used.
|
|
|
|
.sp
|
|
|
|
.SH ASYNCHRONOUS EVENTS
|
|
|
|
.LP
|
|
|
|
Default.
|
|
|
|
.SH STDOUT
|
|
|
|
.SS Diff Directory Comparison Format
|
|
|
|
.LP
|
|
|
|
If both \fIfile1\fP and \fIfile2\fP are directories, the following
|
|
|
|
output formats shall be used.
|
|
|
|
.LP
|
|
|
|
In the POSIX locale, each file that is present in only one directory
|
|
|
|
shall be reported using the following format:
|
|
|
|
.sp
|
|
|
|
.RS
|
|
|
|
.nf
|
|
|
|
|
|
|
|
\fB"Only in %s: %s\\n", <\fP\fIdirectory pathname\fP\fB>, <\fP\fIfilename\fP\fB>
|
|
|
|
\fP
|
|
|
|
.fi
|
|
|
|
.RE
|
|
|
|
.LP
|
|
|
|
In the POSIX locale, subdirectories that are common to the two directories
|
|
|
|
may be reported with the following format:
|
|
|
|
.sp
|
|
|
|
.RS
|
|
|
|
.nf
|
|
|
|
|
|
|
|
\fB"Common subdirectories: %s and %s\\n", <\fP\fIdirectory1 pathname\fP\fB>,
|
|
|
|
<\fP\fIdirectory2 pathname\fP\fB>
|
|
|
|
\fP
|
|
|
|
.fi
|
|
|
|
.RE
|
|
|
|
.LP
|
|
|
|
For each file common to the two directories if the two files are not
|
|
|
|
to be compared, the following format shall be used in the
|
|
|
|
POSIX locale:
|
|
|
|
.sp
|
|
|
|
.RS
|
|
|
|
.nf
|
|
|
|
|
|
|
|
\fB"File %s is a %s while file %s is a %s\\n", <\fP\fIdirectory1 pathname\fP\fB>,
|
|
|
|
<\fP\fIfile type of directory1 pathname\fP\fB>, <\fP\fIdirectory2 pathname\fP\fB>,
|
|
|
|
<\fP\fIfile type of directory2 pathname\fP\fB>
|
|
|
|
\fP
|
|
|
|
.fi
|
|
|
|
.RE
|
|
|
|
.LP
|
|
|
|
For each file common to the two directories, if the files are compared
|
|
|
|
and are identical, no output shall be written. If the two
|
|
|
|
files differ, the following format is written:
|
|
|
|
.sp
|
|
|
|
.RS
|
|
|
|
.nf
|
|
|
|
|
|
|
|
\fB"diff %s %s %s\\n", <\fP\fIdiff_options\fP\fB>, <\fP\fIfilename1\fP\fB>, <\fP\fIfilename2\fP\fB>
|
|
|
|
\fP
|
|
|
|
.fi
|
|
|
|
.RE
|
|
|
|
.LP
|
|
|
|
where <\fIdiff_options\fP> are the options as specified on the command
|
|
|
|
line.
|
|
|
|
.LP
|
|
|
|
All directory pathnames listed in this section shall be relative to
|
|
|
|
the original command line arguments. All other names of
|
|
|
|
files listed in this section shall be filenames (pathname components).
|
|
|
|
.SS Diff Binary Output Format
|
|
|
|
.LP
|
|
|
|
In the POSIX locale, if one or both of the files being compared are
|
|
|
|
not text files, an unspecified format shall be used that
|
|
|
|
contains the pathnames of two files being compared and the string
|
|
|
|
\fB"differ"\fP .
|
|
|
|
.LP
|
|
|
|
If both files being compared are text files, depending on the options
|
|
|
|
specified, one of the following formats shall be used to
|
|
|
|
write the differences.
|
|
|
|
.SS Diff Default Output Format
|
|
|
|
.LP
|
|
|
|
The default (without \fB-e\fP, \fB-f\fP, \fB-c\fP, or \fB-C\fP options)
|
|
|
|
\fIdiff\fP utility output shall contain lines of
|
|
|
|
these forms:
|
|
|
|
.sp
|
|
|
|
.RS
|
|
|
|
.nf
|
|
|
|
|
|
|
|
\fB"%da%d\\n", <\fP\fInum1\fP\fB>, <\fP\fInum2\fP\fB>
|
|
|
|
.sp
|
|
|
|
|
|
|
|
"%da%d,%d\\n", <\fP\fInum1\fP\fB>, <\fP\fInum2\fP\fB>, <\fP\fInum3\fP\fB>
|
|
|
|
.sp
|
|
|
|
|
|
|
|
"%dd%d\\n", <\fP\fInum1\fP\fB>, <\fP\fInum2\fP\fB>
|
|
|
|
.sp
|
|
|
|
|
|
|
|
"%d,%dd%d\\n", <\fP\fInum1\fP\fB>, <\fP\fInum2\fP\fB>, <\fP\fInum3\fP\fB>
|
|
|
|
.sp
|
|
|
|
|
|
|
|
"%dc%d\\n", <\fP\fInum1\fP\fB>, <\fP\fInum2\fP\fB>
|
|
|
|
.sp
|
|
|
|
|
|
|
|
"%d,%dc%d\\n", <\fP\fInum1\fP\fB>, <\fP\fInum2\fP\fB>, <\fP\fInum3\fP\fB>
|
|
|
|
.sp
|
|
|
|
|
|
|
|
"%dc%d,%d\\n", <\fP\fInum1\fP\fB>, <\fP\fInum2\fP\fB>, <\fP\fInum3\fP\fB>
|
|
|
|
.sp
|
|
|
|
|
|
|
|
"%d,%dc%d,%d\\n", <\fP\fInum1\fP\fB>, <\fP\fInum2\fP\fB>, <\fP\fInum3\fP\fB>, <\fP\fInum4\fP\fB>
|
|
|
|
\fP
|
|
|
|
.fi
|
|
|
|
.RE
|
|
|
|
.LP
|
|
|
|
These lines resemble \fIed\fP subcommands to convert \fIfile1\fP into
|
|
|
|
\fIfile2\fP. The
|
|
|
|
line numbers before the action letters shall pertain to \fIfile1\fP;
|
|
|
|
those after shall pertain to \fIfile2\fP. Thus, by
|
|
|
|
exchanging \fIa\fP for \fId\fP and reading the line in reverse order,
|
|
|
|
one can also determine how to convert \fIfile2\fP into
|
|
|
|
\fIfile1\fP. As in \fIed\fP, identical pairs (where \fInum1\fP= \fInum2\fP)
|
|
|
|
are abbreviated
|
|
|
|
as a single number.
|
|
|
|
.LP
|
|
|
|
Following each of these lines, \fIdiff\fP shall write to standard
|
|
|
|
output all lines affected in the first file using the
|
|
|
|
format:
|
|
|
|
.sp
|
|
|
|
.RS
|
|
|
|
.nf
|
|
|
|
|
|
|
|
\fB"< %s", <\fP\fIline\fP\fB>
|
|
|
|
\fP
|
|
|
|
.fi
|
|
|
|
.RE
|
|
|
|
.LP
|
|
|
|
and all lines affected in the second file using the format:
|
|
|
|
.sp
|
|
|
|
.RS
|
|
|
|
.nf
|
|
|
|
|
|
|
|
\fB"> %s", <\fP\fIline\fP\fB>
|
|
|
|
\fP
|
|
|
|
.fi
|
|
|
|
.RE
|
|
|
|
.LP
|
|
|
|
If there are lines affected in both \fIfile1\fP and \fIfile2\fP (as
|
|
|
|
with the \fBc\fP subcommand), the changes are separated
|
|
|
|
with a line consisting of three hyphens:
|
|
|
|
.sp
|
|
|
|
.RS
|
|
|
|
.nf
|
|
|
|
|
|
|
|
\fB"---\\n"
|
|
|
|
\fP
|
|
|
|
.fi
|
|
|
|
.RE
|
|
|
|
.SS Diff -e Output Format
|
|
|
|
.LP
|
|
|
|
With the \fB-e\fP option, a script shall be produced that shall, when
|
|
|
|
provided as input to \fIed\fP, along with an appended \fBw\fP (write)
|
|
|
|
command, convert \fIfile1\fP into \fIfile2\fP. Only
|
|
|
|
the \fBa\fP (append), \fBc\fP (change), \fBd\fP (delete), \fBi\fP
|
|
|
|
(insert), and \fBs\fP (substitute) commands of \fIed\fP shall be used
|
|
|
|
in this script. Text lines, except those consisting of the single
|
|
|
|
character
|
|
|
|
period ( \fB'.'\fP ), shall be output as they appear in the file.
|
|
|
|
.SS Diff -f Output Format
|
|
|
|
.LP
|
|
|
|
With the \fB-f\fP option, an alternative format of script shall be
|
|
|
|
produced. It is similar to that produced by \fB-e\fP, with
|
|
|
|
the following differences:
|
|
|
|
.IP " 1." 4
|
|
|
|
It is expressed in reverse sequence; the output of \fB-e\fP orders
|
|
|
|
changes from the end of the file to the beginning; the
|
|
|
|
\fB-f\fP from beginning to end.
|
|
|
|
.LP
|
|
|
|
.IP " 2." 4
|
|
|
|
The command form <\fIlines\fP> <\fIcommand-letter\fP> used by \fB-e\fP
|
|
|
|
is reversed. For example, 10\fIc\fP with
|
|
|
|
\fB-e\fP would be \fIc\fP10 with \fB-f\fP.
|
|
|
|
.LP
|
|
|
|
.IP " 3." 4
|
|
|
|
The form used for ranges of line numbers is <space>-separated, rather
|
|
|
|
than comma-separated.
|
|
|
|
.LP
|
|
|
|
.SS Diff -c or -C Output Format
|
|
|
|
.LP
|
|
|
|
With the \fB-c\fP or \fB-C\fP option, the output format shall consist
|
|
|
|
of affected lines along with surrounding lines of
|
|
|
|
context. The affected lines shall show which ones need to be deleted
|
|
|
|
or changed in \fIfile1\fP, and those added from \fIfile2\fP.
|
|
|
|
With the \fB-c\fP option, three lines of context, if available, shall
|
|
|
|
be written before and after the affected lines. With the
|
|
|
|
\fB-C\fP option, the user can specify how many lines of context are
|
|
|
|
written. The exact format follows.
|
|
|
|
.LP
|
|
|
|
The name and last modification time of each file shall be output in
|
|
|
|
the following format:
|
|
|
|
.sp
|
|
|
|
.RS
|
|
|
|
.nf
|
|
|
|
|
|
|
|
\fB"*** %s %s\\n",\fP \fIfile1\fP\fB, <\fP\fIfile1 timestamp\fP\fB>
|
|
|
|
"--- %s %s\\n",\fP \fIfile2\fP\fB, <\fP\fIfile2 timestamp\fP\fB>
|
|
|
|
\fP
|
|
|
|
.fi
|
|
|
|
.RE
|
|
|
|
.LP
|
|
|
|
Each <\fIfile\fP> field shall be the pathname of the corresponding
|
|
|
|
file being compared. The pathname written for standard
|
|
|
|
input is unspecified.
|
|
|
|
.LP
|
|
|
|
In the POSIX locale, each <\fItimestamp\fP> field shall be equivalent
|
|
|
|
to the output from the following command:
|
|
|
|
.sp
|
|
|
|
.RS
|
|
|
|
.nf
|
|
|
|
|
|
|
|
\fBdate "+%a %b %e %T %Y"
|
|
|
|
\fP
|
|
|
|
.fi
|
|
|
|
.RE
|
|
|
|
.LP
|
|
|
|
without the trailing <newline>, executed at the time of last modification
|
|
|
|
of the corresponding file (or the current time,
|
|
|
|
if the file is standard input).
|
|
|
|
.LP
|
|
|
|
Then, the following output formats shall be applied for every set
|
|
|
|
of changes.
|
|
|
|
.LP
|
|
|
|
First, a line shall be written in the following format:
|
|
|
|
.sp
|
|
|
|
.RS
|
|
|
|
.nf
|
|
|
|
|
|
|
|
\fB"***************\\n"
|
|
|
|
\fP
|
|
|
|
.fi
|
|
|
|
.RE
|
|
|
|
.LP
|
|
|
|
Next, the range of lines in \fIfile1\fP shall be written in the following
|
|
|
|
format if the range contains two or more lines:
|
|
|
|
.sp
|
|
|
|
.RS
|
|
|
|
.nf
|
|
|
|
|
|
|
|
\fB"*** %d,%d ****\\n", <\fP\fIbeginning line number\fP\fB>, <\fP\fIending line number\fP\fB>
|
|
|
|
\fP
|
|
|
|
.fi
|
|
|
|
.RE
|
|
|
|
.LP
|
|
|
|
and the following format otherwise:
|
|
|
|
.sp
|
|
|
|
.RS
|
|
|
|
.nf
|
|
|
|
|
|
|
|
\fB"*** %d ****\\n", <\fP\fIending line number\fP\fB>
|
|
|
|
\fP
|
|
|
|
.fi
|
|
|
|
.RE
|
|
|
|
.LP
|
|
|
|
The ending line number of an empty range shall be the number of the
|
|
|
|
preceding line, or 0 if the range is at the start of the
|
|
|
|
file.
|
|
|
|
.LP
|
|
|
|
Next, the affected lines along with lines of context (unaffected lines)
|
|
|
|
shall be written. Unaffected lines shall be written in
|
|
|
|
the following format:
|
|
|
|
.sp
|
|
|
|
.RS
|
|
|
|
.nf
|
|
|
|
|
|
|
|
\fB" %s", <\fP\fIunaffected_line\fP\fB>
|
|
|
|
\fP
|
|
|
|
.fi
|
|
|
|
.RE
|
|
|
|
.LP
|
|
|
|
Deleted lines shall be written as:
|
|
|
|
.sp
|
|
|
|
.RS
|
|
|
|
.nf
|
|
|
|
|
|
|
|
\fB"- %s", <\fP\fIdeleted_line\fP\fB>
|
|
|
|
\fP
|
|
|
|
.fi
|
|
|
|
.RE
|
|
|
|
.LP
|
|
|
|
Changed lines shall be written as:
|
|
|
|
.sp
|
|
|
|
.RS
|
|
|
|
.nf
|
|
|
|
|
|
|
|
\fB"! %s", <\fP\fIchanged_line\fP\fB>
|
|
|
|
\fP
|
|
|
|
.fi
|
|
|
|
.RE
|
|
|
|
.LP
|
|
|
|
Next, the range of lines in \fIfile2\fP shall be written in the following
|
|
|
|
format if the range contains two or more lines:
|
|
|
|
.sp
|
|
|
|
.RS
|
|
|
|
.nf
|
|
|
|
|
|
|
|
\fB"--- %d,%d ----\\n", <\fP\fIbeginning line number\fP\fB>, <\fP\fIending line number\fP\fB>
|
|
|
|
\fP
|
|
|
|
.fi
|
|
|
|
.RE
|
|
|
|
.LP
|
|
|
|
and the following format otherwise:
|
|
|
|
.sp
|
|
|
|
.RS
|
|
|
|
.nf
|
|
|
|
|
|
|
|
\fB"--- %d ----\\n", <\fP\fIending line number\fP\fB>
|
|
|
|
\fP
|
|
|
|
.fi
|
|
|
|
.RE
|
|
|
|
.LP
|
|
|
|
Then, lines of context and changed lines shall be written as described
|
|
|
|
in the previous formats. Lines added from \fIfile2\fP
|
|
|
|
shall be written in the following format:
|
|
|
|
.sp
|
|
|
|
.RS
|
|
|
|
.nf
|
|
|
|
|
|
|
|
\fB"+ %s", <\fP\fIadded_line\fP\fB>
|
|
|
|
\fP
|
|
|
|
.fi
|
|
|
|
.RE
|
|
|
|
.SH STDERR
|
|
|
|
.LP
|
|
|
|
The standard error shall be used only for diagnostic messages.
|
|
|
|
.SH OUTPUT FILES
|
|
|
|
.LP
|
|
|
|
None.
|
|
|
|
.SH EXTENDED DESCRIPTION
|
|
|
|
.LP
|
|
|
|
None.
|
|
|
|
.SH EXIT STATUS
|
|
|
|
.LP
|
|
|
|
The following exit values shall be returned:
|
|
|
|
.TP 7
|
|
|
|
\ 0
|
|
|
|
No differences were found.
|
|
|
|
.TP 7
|
|
|
|
\ 1
|
|
|
|
Differences were found.
|
|
|
|
.TP 7
|
|
|
|
>1
|
|
|
|
An error occurred.
|
|
|
|
.sp
|
|
|
|
.SH CONSEQUENCES OF ERRORS
|
|
|
|
.LP
|
|
|
|
Default.
|
|
|
|
.LP
|
|
|
|
\fIThe following sections are informative.\fP
|
|
|
|
.SH APPLICATION USAGE
|
|
|
|
.LP
|
|
|
|
If lines at the end of a file are changed and other lines are added,
|
|
|
|
\fIdiff\fP output may show this as a delete and add, as a
|
|
|
|
change, or as a change and add; \fIdiff\fP is not expected to know
|
|
|
|
which happened and users should not care about the difference
|
|
|
|
in output as long as it clearly shows the differences between the
|
|
|
|
files.
|
|
|
|
.SH EXAMPLES
|
|
|
|
.LP
|
|
|
|
If \fBdir1\fP is a directory containing a directory named \fBx\fP,
|
|
|
|
\fBdir2\fP is a directory containing a directory named
|
|
|
|
\fBx\fP, \fBdir1/x\fP and \fBdir2/x\fP both contain files named \fBdate.out\fP,
|
|
|
|
and \fBdir2/x\fP contains a file named
|
|
|
|
\fBy\fP, the command:
|
|
|
|
.sp
|
|
|
|
.RS
|
|
|
|
.nf
|
|
|
|
|
|
|
|
\fBdiff -r dir1 dir2
|
|
|
|
\fP
|
|
|
|
.fi
|
|
|
|
.RE
|
|
|
|
.LP
|
|
|
|
could produce output similar to:
|
|
|
|
.sp
|
|
|
|
.RS
|
|
|
|
.nf
|
|
|
|
|
|
|
|
\fBCommon 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
|
|
|
|
\fP
|
|
|
|
.fi
|
|
|
|
.RE
|
|
|
|
.SH RATIONALE
|
|
|
|
.LP
|
|
|
|
The \fB-h\fP option was omitted because it was insufficiently specified
|
|
|
|
and does not add to applications portability.
|
|
|
|
.LP
|
|
|
|
Historical implementations employ algorithms that do not always produce
|
|
|
|
a minimum list of differences; the current language
|
|
|
|
about making every effort is the best this volume of IEEE\ Std\ 1003.1-2001
|
|
|
|
can do, as there is no metric that could be
|
|
|
|
employed to judge the quality of implementations against any and all
|
|
|
|
file contents. The statement "This list should be minimal''
|
|
|
|
clearly implies that implementations are not expected to provide the
|
|
|
|
following output when comparing two 100-line files that differ
|
|
|
|
in only one character on a single line:
|
|
|
|
.sp
|
|
|
|
.RS
|
|
|
|
.nf
|
|
|
|
|
|
|
|
\fB1,100c1,100
|
|
|
|
all 100 lines from file1 preceded with "< "
|
|
|
|
---
|
|
|
|
all 100 lines from file2 preceded with "> "
|
|
|
|
\fP
|
|
|
|
.fi
|
|
|
|
.RE
|
|
|
|
.LP
|
|
|
|
The "Only in" messages required when the \fB-r\fP option is specified
|
|
|
|
are not used by most historical implementations if the
|
|
|
|
\fB-e\fP option is also specified. It is required here because it
|
|
|
|
provides useful information that must be provided to update a
|
|
|
|
target directory hierarchy to match a source hierarchy. The "Common
|
|
|
|
subdirectories" messages are written by System V and 4.3 BSD
|
|
|
|
when the \fB-r\fP option is specified. They are allowed here but are
|
|
|
|
not required because they are reporting on something that is
|
|
|
|
the same, not reporting a difference, and are not needed to update
|
|
|
|
a target hierarchy.
|
|
|
|
.LP
|
|
|
|
The \fB-c\fP option, which writes output in a format using lines of
|
|
|
|
context, has been included. The format is useful for a
|
|
|
|
variety of reasons, among them being much improved readability and
|
|
|
|
the ability to understand difference changes when the target
|
|
|
|
file has line numbers that differ from another similar, but slightly
|
|
|
|
different, copy. The \fIpatch\fP utility is most valuable when working
|
|
|
|
with difference listings using the context format.
|
|
|
|
The BSD version of \fB-c\fP takes an optional argument specifying
|
|
|
|
the amount of context. Rather than overloading \fB-c\fP and
|
|
|
|
breaking the Utility Syntax Guidelines for \fIdiff\fP, the standard
|
|
|
|
developers decided to add a separate option for specifying a
|
|
|
|
context diff with a specified amount of context ( \fB-C\fP). Also,
|
|
|
|
the format for context \fIdiff\fPs was extended slightly in
|
|
|
|
4.3 BSD to allow multiple changes that are within context lines from
|
|
|
|
each other to be merged together. The output format contains
|
|
|
|
an additional four asterisks after the range of affected lines in
|
|
|
|
the first filename. This was to provide a flag for old programs
|
|
|
|
(like old versions of \fIpatch\fP) that only understand the old context
|
|
|
|
format. The version
|
|
|
|
of context described here does not require that multiple changes within
|
|
|
|
context lines be merged, but it does not prohibit it
|
|
|
|
either. The extension is upwards-compatible, so any vendors that wish
|
|
|
|
to retain the old version of \fIdiff\fP can do so by adding
|
|
|
|
the extra four asterisks (that is, utilities that currently use \fIdiff\fP
|
|
|
|
and understand the new merged format will also
|
|
|
|
understand the old unmerged format, but not \fIvice versa\fP).
|
|
|
|
.LP
|
|
|
|
The substitute command was added as an additional format for the \fB-e\fP
|
|
|
|
option. This was added to provide implementations
|
|
|
|
with a way to fix the classic "dot alone on a line" bug present in
|
|
|
|
many versions of \fIdiff\fP. Since many implementations have
|
|
|
|
fixed this bug, the standard developers decided not to standardize
|
|
|
|
broken behavior, but rather to provide the necessary tool for
|
|
|
|
fixing the bug. One way to fix this bug is to output two periods whenever
|
|
|
|
a lone period is needed, then terminate the append
|
|
|
|
command with a period, and then use the substitute command to convert
|
|
|
|
the two periods into one period.
|
|
|
|
.LP
|
|
|
|
The BSD-derived \fB-r\fP option was added to provide a mechanism for
|
|
|
|
using \fIdiff\fP to compare two file system trees. This
|
|
|
|
behavior is useful, is standard practice on all BSD-derived systems,
|
|
|
|
and is not easily reproducible with the \fIfind\fP utility.
|
|
|
|
.LP
|
|
|
|
The requirement that \fIdiff\fP not compare files in some circumstances,
|
|
|
|
even though they have the same name, is based on the
|
|
|
|
actual output of historical implementations. The message specified
|
|
|
|
here is already in use when a directory is being compared to a
|
|
|
|
non-directory. It is extended here to preclude the problems arising
|
|
|
|
from running into FIFOs and other files that would cause
|
|
|
|
\fIdiff\fP to hang waiting for input with no indication to the user
|
|
|
|
that \fIdiff\fP was hung. In most common usage, \fIdiff\fP
|
|
|
|
\fB-r\fP should indicate differences in the file hierarchies, not
|
|
|
|
the difference of contents of devices pointed to by the
|
|
|
|
hierarchies.
|
|
|
|
.LP
|
|
|
|
Many early implementations of \fIdiff\fP require seekable files. Since
|
|
|
|
the System Interfaces volume of
|
|
|
|
IEEE\ Std\ 1003.1-2001 supports named pipes, the standard developers
|
|
|
|
decided that such a restriction was unreasonable. Note
|
|
|
|
also that the allowed filename \fB-\fP almost always refers to a pipe.
|
|
|
|
.LP
|
|
|
|
No directory search order is specified for \fIdiff\fP. The historical
|
|
|
|
ordering is, in fact, not optimal, in that it prints out
|
|
|
|
all of the differences at the current level, including the statements
|
|
|
|
about all common subdirectories before recursing into those
|
|
|
|
subdirectories.
|
|
|
|
.LP
|
|
|
|
The message:
|
|
|
|
.sp
|
|
|
|
.RS
|
|
|
|
.nf
|
|
|
|
|
|
|
|
\fB"diff %s %s %s\\n", <\fP\fIdiff_options\fP\fB>, <\fP\fIfilename1\fP\fB>, <\fP\fIfilename2\fP\fB>
|
|
|
|
\fP
|
|
|
|
.fi
|
|
|
|
.RE
|
|
|
|
.LP
|
|
|
|
does not vary by locale because it is the representation of a command,
|
|
|
|
not an English sentence.
|
|
|
|
.SH FUTURE DIRECTIONS
|
|
|
|
.LP
|
|
|
|
None.
|
|
|
|
.SH SEE ALSO
|
|
|
|
.LP
|
2007-09-20 06:36:16 +00:00
|
|
|
\fIcmp\fP, \fIcomm\fP, \fIed\fP, \fIfind\fP
|
2004-11-03 13:51:07 +00:00
|
|
|
.SH COPYRIGHT
|
|
|
|
Portions of this text are reprinted and reproduced in electronic form
|
|
|
|
from IEEE Std 1003.1, 2003 Edition, Standard for Information Technology
|
|
|
|
-- Portable Operating System Interface (POSIX), The Open Group Base
|
|
|
|
Specifications Issue 6, Copyright (C) 2001-2003 by the Institute of
|
|
|
|
Electrical and Electronics Engineers, Inc and The Open Group. In the
|
|
|
|
event of any discrepancy between this version 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 .
|