aboutsummaryrefslogtreecommitdiffstats
path: root/man-pages-posix-2003/man1p/diff.1p
diff options
context:
space:
mode:
Diffstat (limited to 'man-pages-posix-2003/man1p/diff.1p')
-rw-r--r--man-pages-posix-2003/man1p/diff.1p651
1 files changed, 651 insertions, 0 deletions
diff --git a/man-pages-posix-2003/man1p/diff.1p b/man-pages-posix-2003/man1p/diff.1p
new file mode 100644
index 0000000..cd5f26c
--- /dev/null
+++ b/man-pages-posix-2003/man1p/diff.1p
@@ -0,0 +1,651 @@
+.\" Copyright (c) 2001-2003 The Open Group, All Rights Reserved
+.TH "DIFF" 1P 2003 "IEEE/The Open Group" "POSIX Programmer's Manual"
+.\" diff
+.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.
+.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
+\fIfile2\fP operand is \fB'-'\fP, the standard input
+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
+\fIcmp\fP, \fIcomm\fP, \fIed\fP, \fIfind\fP
+.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 .