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

FreeBSD Manual Pages

  
 
  

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

NAME
     diff - compare two files

SYNOPSIS
     diff [-abBiNptw] [-c | -e | -f | -h | -n | -q | -u] file1 file2

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

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

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

DESCRIPTION
     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  sin-
     gle 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 sec-
     ond file flagged by `>'.

OPTIONS
     The following options are supported:

     -a     Treat all files as ASCII text.  Normally diff will simply print `Bi-
	    nary files ... and ... differ' if files contain  binary  characters.
	    Use of this option forces diff to produce a diff.

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

     -B     Ignores changes that just inserted or deleted blank (empty) lines.

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

     -N     New  file mode, treat absent files as empty.  If diff(1) prints time
	    stamps for files, the time stamp for missing  files  will  refer  to
	    January 1 1970 00:00:00 GMT.

     -p     With  unified  and context diffs, show with each change the first 40
	    characters of the last line before the context beginning with a let-
	    ter, an underscore or a dollar sign.  For C  source  code  following
	    standard  layout  conventions,  this  will show the prototype of the
	    function the change applies to.

     -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 interpret.  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 `if(a==b)'.

     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 preprocessor
		 controls  included  so that a compilation of the result without
		 defining string is equivalent to compiling file1, while  defin-
		 ing string will yield file2.

     -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 program 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
		 output.

		   (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, -q, -u, and -n
		 are  unavailable  with -h.  diff does not descend into directo-
		 ries 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.

     -q 	 Just  print  a single line message when the files differ.  Does
		 not output a list of changes.

     -u 	 Produces a listing of differences with three lines of	context.
		 The output is similar to that of the -c option, 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  ap-
		 pear  with the -c option. Each change is separated 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 encountered.

     -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.

OPERANDS
     The following operands are supported:
     file1
     file2	 A path name of a file or directory to be  compared.  If  either
		 file1	or  file2  is  -, the standard input will be used in its
		 place.

     directory1
     directory2  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-directory file.

USAGE
     See largefile(7) for the description of the behavior of diff  when  encoun-
     tering files greater than or equal to 2 Gbyte ( 2^31 bytes).

EXAMPLES
     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

       1c1

       < Mon Jul  2 13:12:16 PDT 1990

       ---

       > Tue Jun 19 21:41:39 PDT 1990

ENVIRONMENT VARIABLES
     See environ(7) 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 calculat-
	    ing file timestamps written with the -C and -c options.

EXIT STATUS
     The following exit values are returned:

     0	    No differences were found.

     1	    Differences were found.

     >1     An error occurred.

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

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

ATTRIBUTES
     See attributes(7) for descriptions of the following attributes:

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

SEE ALSO
     bdiff(1), cmp(1), comm(1), dircmp(1), ed(1), patch(1), pr(1), sdiff(1), at-
     tributes(7), environ(7), largefile(7), standards(7)

     James W. Hunt and M. Douglas McIlroy, "An Algorithm for  Differential  File
     Comparison", Computing Science Technical Report, Bell Laboratories 41, June
     1976

NOTES
     Editing scripts produced under the -f option are naive about creating lines
     consisting  of  a single period (.).  Editing scripts produced under the -e
     option contain a workaround for the problem that is understood by patch(1).

     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.

BUGS
     None currently known.

     Mail  bugs  and  suggestions  to  schilytools@mlists.in-berlin.de or open a
     ticket at https://codeberg.org/schilytools/schilytools/issues.

     The mailing list archive may be found at:

     https://mlists.in-berlin.de/mailman/listinfo/schilytools-mlists.in-berlin.de.

AUTHORS
     The diff(1) program was initially written by Douglas McIlroy at  Bell  Labs
     in  1974.	The SVr4 release was written by various authors at AT&T in 1989.
     The diff(1) program was later maintained by various people at AT&T and  Sun
     Microsystems. Since 2006, it has been maintained by Joerg Schilling and the
     schilytools project authors.

SunOS 5.11			   2022/10/06				 diff(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=diff&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help