Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
diff(1)				 User Commands			       diff(1)

       diff - compare two files

       diff [-bitw] [-c	| -e | -f | -h | -n | -u]  file1 file2

       diff [-bitw] [-C	number | -U number]  file1 file2

       diff [-bitw] [-D	string]	file1 file2

       diff  [-bitw]  [-c  | -e	| -f | -h | -n | -u]  [-l] [-r]	[-s] [-S name]
       directory1 directory2

       The diff	utility	will compare the contents of file1 and file2 and write
       to  standard  output  a list of changes necessary to convert file1 into
       file2. This list	should be minimal.  Except in rare circumstances, diff
       finds  a	smallest sufficient set	of file	differences. No	output will be
       produced	if the files are identical.

       The normal output contains lines	of these forms:

       n1 a n3,n4
       n1,n2 d n3
       n1,n2 c n3,n4

       where n1	and n2 represent lines file1 and n3 and	n4 represent lines  in
       file2 These lines resemble ed(1)	commands to convert file1 to file2. By
       exchanging a for	d and reading backward,	 file2	can  be	 converted  to
       file1. As in ed,	identical pairs, where n1=n2 or	n3=n4, are abbreviated
       as a single number.

       Following each of these lines come all the lines	that are  affected  in
       the  first file flagged by `<', then all	the lines that are affected in
       the second file flagged by `>'.

       The following options are supported:

       -b	       Ignores trailing	blanks (spaces and  tabs)  and	treats
		       other strings of	blanks as equivalent.

       -i	       Ignores the case	of letters. For	example, `A' will com-
		       pare equal to `a'.

       -t	       Expands <TAB> characters	in output lines. Normal	or  -c
		       output adds character(s)	to the front of	each line that
		       may adversely affect the	indentation  of	 the  original
		       source lines and	make the output	lines difficult	to in-
		       terpret.	 This  option  will  preserve	the   original
		       source's	indentation.

       -w	       Ignores	all  blanks (<SPACE> and <TAB> characters) and
		       treats all other	strings	of blanks as  equivalent.  For
		       example,	  `if (	a == b )'   will   compare   equal  to

       The following options are mutually exclusive:

       -c	       Produces	a listing of differences with three  lines  of
		       context.	 With  this  option, output format is modified
		       slightly. That is, output begins	with identification of
		       the  files involved and their creation dates, then each
		       change is separated by a	line with  a  dozen  *'s.  The
		       lines  removed  from  file1  are	 marked	with '--'. The
		       lines added to file2 are	marked	'+'.  Lines  that  are
		       changed	from  one file to the other are	marked in both
		       files with '!'.

       -C number       Produces	a listing of  differences  identical  to  that
		       produced	by -c with number lines	of context.

       -D string       Creates a merged	version	of file1 and file2 with	C pre-
		       processor controls included so that  a  compilation  of
		       the  result  without  defining  string is equivalent to
		       compiling  file1,  while	 defining  string  will	 yield

       -e	       Produces	 a script of only a, c,	and d commands for the
		       editor ed, which	will recreate  file2  from  file1.  In
		       connection with the -e option, the following shell pro-
		       gram may	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	version'' appears on the standard out-

		       (shift; cat $*; echo '1,$p') | ed - $1

       -f	       Produces	a similar script, not useful with ed,  in  the
		       opposite	order.

       -h	       Does  a	fast,  half-hearted  job.  It  works only when
		       changed stretches are short  and	 well  separated,  but
		       does work on files of unlimited length. Options -c, -C,
		       -D, -e, -f, and -n are unavailable with -h.  diff  does
		       not descend into	directories with this option.

       -n	       Produces	 a  script  similar to -e, but in the opposite
		       order and with a	count of changed lines on each	insert
		       or delete command.

       -u	       Produces	 a  listing of differences with	three lines of
		       context.	The output is similar to that of  the  -c  op-
		       tion, except that the context is	"unified". Removed and
		       changed lines in	file1 are marked by a '-' while	 lines
		       added  or  changed  in  file2 are marked	by a '+'. Both
		       versions	of changed lines appear	in the	output,	 while
		       added, removed, and context lines appear	only once. The
		       identification of file1 and file2  is  different,  with
		       "---"  and  "+++"  being	 printed where "***" and "---"
		       would appear with the -c	option.	Each change  is	 sepa-
		       rated by	a line of the form

		       @@ -n1,n2 +n3,n4	@@

       -U number       Produces	 a  listing  of	 differences identical to that
		       produced	by -u with number lines	of context.

       The following options are used for comparing directories:

       -l	       Produces	output in long format. Before the  diff,  each
		       text file is piped through pr(1)	to paginate it.	 Other
		       differences are remembered  and	summarized  after  all
		       text file differences are reported.

       -r	       Applies	diff  recursively to common subdirectories en-

       -s	       Reports files that are identical. These identical files
		       would not otherwise be mentioned.

       -S name	       Starts  a  directory diff in the	middle,	beginning with
		       the file	name.

       The following operands are supported:

       file1	       A path name of a	file or	directory to be	 compared.  If
       file2	       either  file1 or	file2 is -, the	standard input will be
		       used in its place.

       directory1      A path name of a	directory to be	compared.

       If only one of file1 and	file2 is a directory, diff will	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-di-
       rectory file.

       See  largefile(5)  for the description of the behavior of diff when en-
       countering files	greater	than or	equal to 2 Gbyte ( 2**31 bytes).

       Example 1: Typical output of the	diff command

       In the following	command, dir1 is a directory  containing  a  directory
       named x,	dir2 is	a directory containing a directory named x, dir1/x and
       dir2/x both contain files named date.out, and dir2/x  contains  a  file
       named y:

       example%	diff -r	dir1 dir2
       Common subdirectories: dir1/x and dir2/x

       Only in dir2/x: y

       diff -r dir1/x/date.out dir2/x/date.out


       < Mon Jul  2 13:12:16 PDT 1990


       > Tue Jun 19 21:41:39 PDT 1990

       See  environ(5) for descriptions	of the following environment variables
       that affect the execution of diff: LANG,	LC_ALL,	LC_CTYPE, LC_MESSAGES,
       LC_TIME,	and NLSPATH.

       TZ	Determines the locale for affecting the	timezone used for cal-
		culating file timestamps written with the -C and -c options.

       The following exit values are returned:

       0	No differences were found.

       1	Differences were found.

       >1	An error occurred.

       /tmp/d?????	       temporary file used for comparison

       /usr/lib/diffh	       executable file for -h option

       See attributes(5) for descriptions of the following attributes:

       |      ATTRIBUTE	TYPE	     |	    ATTRIBUTE VALUE	   |
       |Availability		     |SUNWesu			   |
       |CSI			     |Enabled			   |
       |Interface Stability	     |Standard			   |

       bdiff(1), cmp(1), comm(1), dircmp(1),  ed(1),  pr(1),  sdiff(  1),  at-
       tributes(5), environ(5),	largefile(5), standards(5)

       Editing	scripts	 produced  under  the -e or -f options are naive about
       creating	lines consisting of a single period (.).

       Missing NEWLINE at end of file indicates	that the last line of the file
       in  question  did  not have a NEWLINE. If the lines are different, they
       will be flagged and output, although the	output will seem  to  indicate
       they are	the same.

SunOS 5.10			  22 Sep 2004			       diff(1)


Want to link to this manual page? Use this URL:

home | help