diff - display differences between two files (or directories)

diff [options] old-file new-file

Use - to read from standard input.

diff directory file
  Compares the corresponding file in directory . The non-directory file must not be - .

diff directory directory
 Compares corresponding files in both directories, in alphabetical order.
This comparison is not recursive unless the -r or ‑‑recursive option is given.

diff never compares the actual contents of a directory as if it were a file. The file that is fully specified may not be standard input, because standard input is nameless and the notion of "file with the same name" does not apply.

Use -- to terminate options when specifing file names which begin with a -.

Multiple single letter options can be combined (example: ‑wyW50)

Options to ignore "insignificant" differences
Ignore differences that just insert or delete Blank lines
Ignore differences in amount of blanks
Ignore white space when comparing lines, including ␍␊ (0D0A ) verses (0A alone) as in Apple Mac vs linux vs MSWindows.
-I regexp
--ignore-matching-lines= regexp
Ignore differences that just insert or delete lines that match regexp.
Option affecting amount of output
quite Do not show differences.
Only whether the files differ, not the details of the differences.
Display "Files old-file and new-file differ" or nothing if the files are the same.

See cmp for "quiter". Check the return code $?

if [ $? -gt 0  ]; then 
     echo -n  $'\a '
to spaces in the output, preserves the alignment of tabs in the input files.
Output a Tab rather than a space before the text of a line in normal or context format, causes the alignment to look normal.
  diff -y dfdf dfdf_1
Avail   Mounted                                                 Avail   Mounted
695M    /                                                       695M    /
170M    /Volumes/DATA                                           170M    /Volumes/DATA
56K     /Volumes/BACKUP_2                                       56K     /Volumes/BACKUP_2
919M    /Volumes/TBD                                          | 898M    /Volumes/TBD
xxxx                                                            xxxx
-W columns
diff -W70 --side-by-side dfdf dfdf_1
Avail   Mounted                         Avail   Mounted
695M    /                               695M    /
170M    /Volumes/DATA                   170M    /Volumes/DATA
56K     /Volumes/BACKUP_2               56K     /Volumes/BACKUP_2
919M    /Volumes/TBD              |     898M    /Volumes/TBD
xxxx                                    xxxx
diff  -wyW$COLUMNS --su    dfdf dfdf_1
diff -yW50 --suppress dfdf dfdf_1 
919M    /Volumes/TBD                                         | 898M    /Volumes/TBD
--leftcolumn only
diff -yW60 --left dfdf dfdf_1
Avail   Mounted              (
695M    /                    (
170M    /Volumes/DATA        (
56K     /Volumes/BACKUP_2    (
919M    /Volumes/TBD         |  898M    /Volumes/TBD
xxxx                         ( 

When comparing directories:
Report are identical when files are the same,
     otherwise no output is produced.
-x pattern
ignore files and subdirectories whose basenames match pattern.
--exclude-from=file ignore files and subdirectories whose basenames match any pattern in file.
-X file ignore files and subdirectories whose basenames match any pattern contained in file.
compare subdirectories .
a file found in only in one directory is compared to an empty file.
a file occuring only in the second directory id compared to an empty file.
-S file
start with the file file. Use for resuming an aborted comparison.
--horizon-lines=lines Do not discard the last lines lines of the common prefix and the first lines lines of the common suffix.
--from-file= file Compare file to all operands. file can be a directory.
--to-file= file Compare all operands to file. file can be a directory.
-l --paginate Pass the output through pr to paginate it.

-a --text Treat all files as ASCII text and compare them line-by-line, even if they do not seem to be text.


Show the differences with some lines before and after the differences.

  -c Use the context output format
  -C lines
--context=lines. Show lines of context. Default 3.

diff  -c dfdf1 dfdf2
*** dfdf1 Tue Sep  5 18:10:15 2006  ← mod date of file prefixed with stars 
--- dfdf2 Tue Sep  5 18:10:24 2006
***************  ← seperator
*** 4,7 **** ← position (column,line) where difference starts in dfdf1
  1.3G  /Volumes/PHOTOS_1
  2.7G  /Volumes/PHOTOS_2
  56K   /Volumes/BACKUP_2
! 919M  /Volumes/TBD
 ↖ position where difference starts
----4,7 ---- ← position (column,line) where difference starts in dfdf2
  1.3G  /Volumes/PHOTOS_1
  2.7G  /Volumes/PHOTOS_2
  56K   /Volumes/BACKUP_2
! 898M  /Volumes/TBD 
--ed Make output that is a valid ed script.
898M    /Volumes/TBD

--forward-ed Make output that looks vaguely like an ed script but has changes in the order they appear in the file.

diff  -f dfdf dfdf_1
898M    /Volumes/TBD

  -F regexp In context and unified format for each hunk of differences, show some of the last preceding line that matches regexp.

--rcs Output RCS-format(Revision Control Systems) diffs; like -f except that each command specifies the number of lines affected.

diff  -n dfdf dfdf_1
d7 1
a7 1
898M    /Volumes/TBD

  -L label
--label=label Use label instead of the file name in the context and unified format headers.

-D name
--ifdef=name Make merged if-then-else format output, conditional on the preprocessor macro name.

--line-format=format Use format to output all input lines in in-then-else format.

%L contents of line %l , excluding any trailing newline
%[-]*[width][.[prec*{doxX}*n printf-style spec for input line number
%% the % character
x the single character x (i.e. any character)
%c'\OOO' the character with octal code OOO
diff --line-format="%8dn  %L" dfdf dfdf_1
       1  Avail Mounted
       2  695M  /
       3  170M  /Volumes/DATA
       4  1.3G  /Volumes/PHOTOS_1
       5  2.7G  /Volumes/PHOTOS_2
       6  56K   /Volumes/BACKUP_2
       7  919M  /Volumes/TBD
       7  898M  /Volumes/TBD
       8  xxxx
--old-line-format=format... a line taken from just the first file
--new-line-format=format ...a line taken from just the second file
--unchanged-line-format=format ... a line common to both files

% lines from FILE1
%> lines from FILE2
%= lines common to FILE1 and FILE2
%% %
%c'C' the single character C
%c'\OOO' the character with octal code OOO
%[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER
LETTERs are as follows for new group, lower case for old group:
F first line number
L last line number
N number of lines = L-F+1
E F-1
M L+1
--changed-group-format=format Use format to output a line group containing differing lines from both files
--old-group-format=format ... the first file
--new-group-format=format ...the second
--unchanged-group-format=format ... of common lines from both files

-u Use the unified output format.
-U lines
Use the unified output format, showing lines of context. default 3.
#cat 0

Avail   Mounted
10632   /
791     /Volumes/DATA
560     /Volumes/PHOTOS
3504    /Volumes/BACKUPS
4542    /Volumes/linux
934     /Volumes/SWAP
#cat 00

Avail   Mounted
10639   /
791     /Volumes/DATA
560     /Volumes/PHOTOS
3504    /Volumes/BACKUPS
4542    /Volumes/linux
934     /Volumes/SWAP

diff -u 0 00
--- 0   2007-01-14 21:07:11.000000000 -0500
+++ 00  2007-01-14 21:15:54.000000000 -0500
@@ -1,5 +1,5 @@
 Avail  Mounted
-10632  /
+10639  /
 791    /Volumes/DATA
 560    /Volumes/PHOTOS
 3504   /Volumes/BACKUPS

--show-function-line=regexp In context and unified format, for each hunk of differences, show some of the last preceding line that matches regexp.

--sdiff-merge-assist Print extra information to help sdiff. sdiff uses this option when it runs diff. This option is not intended for users to use directly.

-d --minimal Change the algorithm to perhaps find a smaller set of changes. slower (sometimes much slower).
--speed-large-files Use Heuristics to speed handling of large files that have numerous scattered small changes.


cmp , comm, diff3, ed, patch, pr, sdiff.


exit status
0 no differences were found,
1 some differences were found
2 means trouble ( binary file mismatch, file not found/accessible,...).

cmp options file1 file2

output differing bytes.
file1 file2 differ: byte 1232, line 38 is 
 164 t  
163 s


Skip the first SKIP bytes of input.
Skip the first SKIP1 bytes of FILE1 and the first bytes of FILE2.
Output byte numbers and values of all differing bytes.
Compare at most LIMIT bytes.
Output nothing; test the return value
Return values: 0 - files are identical; 1 - files differ; 2 - inaccessible or missing argument

>cmp -l F801191247/weather_station.dat F801191257/weather_station.dat | column  -c140 -x

 76 245  75  77   1  24  78 127 203  79  75 274  80 263 200  81  76  70  82 221 170  83 261 156
 84 323 337  85   6  23  86 347 324  87 164  34  88 154 247  89 147 217  90 131 111  91  37 334
 92 222  30  93 267 375  94  57 232  95 366 227  96 244 367  97   0  10  98 314  14  99 203 365
100 326 272 101 116 352 102 244  71 103  35  16 104 202 270 105  56 102 106 341 357 107 372 125
108 124 114 109 143 253 110 217  61 111 223 166 112   3 342 113 263 331 114 141 367 115 325 164
116 135 341 117  47 352 118 200  72 119  34 266 120 170 116 121 261 107 122   6  54 123  73  23
124  37 121 125 324 173 126 171 125 127 252   3 128  16  21 129 123 101 130  16 313 131 306 257
132 175  77 133  10 125 134  66 175 135 253 167 136 153   1 137 204  27 138 264 162 139 245  13

comm [OPTION]... FILE1 FILE2

Compare sorted files FILE1 and FILE2 line by line displaying lines in common.

With no options, produce three-column output.
first Column contains lines unique to FILE1,
second column contains lines unique to FILE2 and
last column contains lines common to both files.

-1 suppress lines unique to FILE1 (first column)
-2 suppress lines unique to FILE2 (secondcolumn)
-3 suppress lines that appear in both files (last column)

--version output version information and exit

> cat 1
> cat 2
> comm 1 2

sdiff - side-by-side merge of file differences sdiff [option]... file1 file2

Side-by-side merge of file differences.

Ignore minor differences
due to tab expansion.
amount of white space.
all white space.
are all blank.
matching RE.
--strip-trailing-cr Strip trailing carriage return on input.
Treat all files as ASCII text.
output controls
-w NUM
at most NUM (default 130) columns per line.
only the left column of common lines.
Expand tabs to spaces in output.
Try hard to find a smaller set of changes.
Assume large files and many scattered small changes.
output to FILE.
--diff-program=PROGRAM Use PROGRAM to compare files.


If a FILE is `-', read standard input.

diff aka top