NAME
diff - Compares text files
SYNOPSIS
diff [-c | -C number | -e | -f | -h | -n] [-bilrstw] [-
Sfile] directory1 directory2
diff [-c | -C number | -e | -f | -h | -n] [-bitw] file1
file2
diff [-Dstring] [-bitw] file1 file2
FLAGS
The -c, -C, -e, -f, -h, and -n flags are mutually exclusive.
The -r, -s, and -S flags can be specified with directory
comparisons only.
The -b, -i, -l, -t, and -w flags can be used in combination
with any others and in both file and directory comparisons.
-b Causes trailing spaces and tabs (blanks) to be ignored,
and other strings of spaces and tabs to be considered
identical by diff.
-c Produces a listing with the default number of lines of
context (3 lines). The output lists the files being
compared and their last modification dates, then lists
the differing lines. Lines that are changed from one
file to the other are marked in both files with an !
(exclamation point). Changes that lie within the speci-
fied number of lines of each other are grouped together
on output.
-C number
Produces output that provides number lines of context
(where number is a positive decimal integer).
-Dstring
Causes diff to create a merged version of file1 and
file2 on the standard output, with C preprocessor con-
trols included so that a compilation of the result
without defining string is equivalent to compiling
file1, while defining string yields file2.
-e Produces a script of a, c and d commands for the editor
ed, which can recreate file2 from file1. In connection
with -e, the following shell program can help maintain
multiple versions of a file. Only an ancestral file
($1) and a chain of version-to-version ed scripts ($2,
$3, ...) made by diff need be on hand. A "latest ver-
sion" appears on the standard output.
(shift; cat $*; echo '1,$p') | ed - $1
Extra commands are added to the output when comparing
directories with -e; the result is a sh script for con-
verting text files common to the directories from their
state in directory1 to their state in directory2.
-f Produces a script similar to that of -e, not useful with
ed, and in the opposite order.
-h Performs a faster comparison. This flag only works when
the changed sections are short and well separated, but
it does work on files of any length. The -e and -f
flags are not available when you use the -h flag.
-i Ignores the case of letters. For example, A is con-
sidered identical to a.
-l Specifies long output format; each text file diff list-
ing is piped through pr to paginate it, other differ-
ences are remembered and summarized after all text file
differences are reported. (Directory comparisons only.)
-n Produces a script similar to that of -e, but in the
opposite order and with a count of changed lines on each
insert or delete command. This is the form used by the
revision control system (RCS).
-r Checks files in common subdirectories recursively.
-s Reports files that are the same, which are otherwise not
mentioned.
-Sfile
Starts a directory diff in the middle, beginning with
file. (Directory comparisons only.)
-t Expands tabs in output lines. Normal or -c output adds
characters to the front of each line that can affect the
indentation of the original source lines and make the
output listing difficult to interpret. This flag
preserves the original source's indentation.
-w Is similar to -b, but causes whitespace (spaces and
tabs) to be ignored. For example, if ( a == b ) is con-
sidered identical to if(a==b).
DESCRIPTION
Input Options
If neither file1 nor file2 is a directory, then either can
be given as - (dash), in which case the standard input is
used. If file1 is a directory and file2 is a file, or vice
versa, a file in the specified directory with the same name
as the specified file is used.
If both arguments are directories, diff sorts the contents
of the directories by name, and then runs the regular diff
file algorithm on text files that are different. Binary
files that differ, common subdirectories, and files that
appear in only one directory are also listed.
Output Options
There are several choices for output format. The default
output format contains lines of these forms:
number1 a number2,number3
number1,number2 d number3
number1,number2 c number3,number4
These lines resemble ed commands to convert file1 into
file2. a indicates that a line or lines were added to one
of the files; d indicates that a line or lines were deleted;
and c indicates that a line or lines were changed. The
numbers after the letters pertain to file2. In fact, by
exchanging a for d and reading backward one can ascertain
equally how to convert file2 into file1. As in ed, identi-
cal pairs where number1 = number2 or number3 = number4 are
abbreviated as a single number.
Following each of these lines come all the lines that are
affected in the first file, flagged by < (left angle
bracket), then all the lines that are affected in the second
file, flagged by > (right angle bracket).
Except in rare circumstances, diff finds the smallest suffi-
cient set of file differences.
EXAMPLES
1. To compare two files, enter:
diff chap1.bak chap1
This displays the differences between the files
chap1.bak and chap1.
2. To compare two files, ignoring differences in the
amount of white space, enter:
diff -b prog.c.bak prog.c
If two lines differ only in the number of spaces and
tabs between words, then the diff command considers
them to be the same.
3. To create a file containing commands that the ed com-
mand can use to reconstruct one file from another,
enter:
diff -e ch2 ch2.old > new.old.ed
This creates a file named new.to.old.ed that contains
the ed subcommands to change chap2 back into the ver-
sion of the text found in chap2.old. In most cases,
new.to.old.ed is a much smaller file than chap2.old.
4. You can save disk space by deleting chap2.old, and you
can reconstruct it at any time by entering:
(cat new.old.ed ; echo '1,$p') | ed - ch2 > ch2.old
The commands in parentheses add 1,$p to the end of the
editing commands sent to the ed editor. The 1,$p
causes the ed command to write the file to standard
output after editing it. This modified command
sequence is then piped to the ed command ( | ed ), and
the editor reads it as standard input. The - flag
causes the ed command not to display the file size and
other extra information, since it would be mixed with
the text of chap2.old.
FILES
/usr/lbin/diffh
For the -h flag.
/usr/bin/pr
For the -l flag.
NOTES
1. Editing scripts produced by the -e or -f flags cannot
create lines consisting of a single . (dot) character.
2. Block, character, or FIFO special files cannot be used
with diff because they cause the command to exit.
EXIT VALUES
An exit value of 0 (zero) indicates no differences, 1 indi-
cates differences found, and a number greater than 1 indi-
cates an error.
RELATED INFORMATION
Commands: bdiff(1), cmp(1), comm(1), diff3(1),
ed(1)/red(1).
Acknowledgement and Disclaimer