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

FreeBSD Manual Pages

  
 
  

home | help
2DIFF(1)		    General Commands Manual		      2DIFF(1)

NAME
       2diff - 2.11BSD differential file and directory comparator

SYNOPSIS
       2diff [ -l ] [ -r ] [ -s	] [ -cefhn ] [ -biwt ] dir1 dir2
       2diff [ -cefhn ]	[ -biwt	] file1	file2
       2diff [ -Dstring	] [ -biw ] file1 file2

DESCRIPTION
       If  both	arguments are directories, 2diff sorts the contents of the di-
       rectories by name, and then runs	the regular file 2diff algorithm  (de-
       scribed	below)	on text	files which are	different.  Binary files which
       differ, common subdirectories, and files	which appear in	only  one  di-
       rectory are listed.  Options when comparing directories are:

       -l     long  output format; each	text file 2diff	is piped through pr(1)
	      to paginate it, other differences	are remembered and  summarized
	      after all	text file differences are reported.

       -r     causes application of 2diff recursively to common	subdirectories
	      encountered.

       -s     causes  2diff to report files which are the same,	which are oth-
	      erwise not mentioned.

       -Sname starts a directory 2diff in the middle beginning with file name.

       When run	on regular files, and when comparing text files	 which	differ
       during  directory comparison, 2diff tells what lines must be changed in
       the files to bring them into agreement.	Except in rare	circumstances,
       2diff  finds a smallest sufficient set of file differences.  If neither
       file1 nor file2 is a directory, then either may be  given  as  `-',  in
       which case the standard input is	used.  If file1	is a directory,	then a
       file  in	that directory whose file-name is the same as the file-name of
       file2 is	used (and vice versa).

       There are several options for output format; the	default	output	format
       contains	lines of these forms:

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

       These lines resemble ed commands	to convert file1 into file2.  The num-
       bers  after  the	 letters pertain to file2.  In fact, by	exchanging `a'
       for `d' and reading backward one	may ascertain equally how  to  convert
       file2  into  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 `>'.

       Except for -b, -w, -i or	-t which may be	given with any of the  others,
       the following options are mutually exclusive:

       -e	produces  a  script  of	a, c and d commands for	the editor ed,
		which will recreate file2 from file1.  In connection with  -e,
		the  following	shell  program may help	maintain multiple ver-
		sions of a file.  Only an ancestral file ($1) and a  chain  of
		version-to-version  ed	scripts	($2,$3,...) made by 2diff need
		be on hand.  A `latest version'	appears	on the	standard  out-
		put.

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

		Extra commands are added to the	output when comparing directo-
		ries  with  -e,	 so that the result is a sh(1) script for con-
		verting	text files which are common  to	 the  two  directories
		from their state in dir1 to their state	in dir2.

       -f	produces  a  script similar to that of -e, not useful with ed,
		and in the opposite order.

       -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 rcsdiff(1).

       -c	produces a diff	with lines of  context.	  The  default	is  to
		present	 3  lines of context and may be	changed, e.g to	10, by
		-c10.  With -c the output format  is  modified	slightly:  the
		output beginning with identification of	the files involved and
		their  creation	 dates	and then each change is	separated by a
		line with a dozen *'s.	 The  lines  removed  from  file1  are
		marked with `- '; those	added to file2 are marked `+ '.	 Lines
		which  are  changed  from  one file to the other are marked in
		both files with	with `!	'.

		Changes	which lie within <context> lines  of  each  other  are
		grouped	together on output.  (This is a	change from the	previ-
		ous ``2diff -c'' but the resulting output is usually much eas-
		ier to interpret.)

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

       -Dstring	causes 2diff to	create a merged	version	of file1 and file2  on
		the  standard output, with C preprocessor controls included so
		that a compilation of the result without  defining  string  is
		equivalent  to	compiling  file1,  while  defining string will
		yield file2.

       -b	causes trailing	blanks (spaces and tabs) to  be	 ignored,  and
		other strings of blanks	to compare equal.

       -w	is similar to -b but causes whitespace (blanks and tabs) to be
		totally	 ignored.   E.g., ``if ( a == b	)'' will compare equal
		to ``if(a==b)''.

       -i	ignores	the case of letters.  E.g., ``A'' will	compare	 equal
		to ``a''.

       -t	will  expand  tabs  in output lines.  Normal or	-c output adds
		character(s) to	the front of each line which may screw up  the
		indentation  of	 the original source lines and make the	output
		listing	difficult to interpret.	 This option will preserve the
		original source's indentation.

FILES
       /tmp/d?????
       /usr/local/libexec/2diffh for -h
       /usr/local/bin/2diff for	directory diffs
       /usr/bin/pr

SEE ALSO
       cmp(1), cc(1), comm(1), ed(1), diff3(1)

DIAGNOSTICS
       Exit status is 0	for no differences, 1 for some,	2 for trouble.

BUGS
       Editing scripts produced	under the -e or	-f option are naive about cre-
       ating lines consisting of a single `.'.

       When comparing directories with the -b, -w  or  -i  options  specified,
       2diff  first  compares  the  files ala cmp, and then decides to run the
       2diff algorithm if they are not equal.  This may	cause a	 small	amount
       of  spurious  output if the files then turn out to be identical because
       the only	differences are	insignificant blank  string  or	 case  differ-
       ences.

4th Berkeley Distribution      October 21, 1996			      2DIFF(1)

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

home | help