Usage:

zzdiff [ option ] ... file-or-url1 file-or-url2
Show contents differences between file-or-url1 and file-or-url2 in DIFF format. The "path" (relevant, e.g., for the "--path" command line option, see below) is "" (the empty string). One of the two inputs may be "-" (standard input).
zzdiff [ option ] ... dir1 dir2
Show which files were added (missing in dir1) or deleted (missing in dir2) and their subdirectories, and any contents differences for the remaining files in DIFF format. The "path" (relevant, e.g., for the "--path" command line option, see below) is relative to dir1, e.g. "file.txt" or "subdir/file.zip!dir/file.txt" or "archive.tgz%!dir/file.txt" or "dir/file.Z%".

Description:

Compares files and web resources line by line; detects directories, compressed and archive files, and even nested archives, and compares their entries instead of their raw contents.

The default output format is the "normal format", also known as the "traditional format". Other output formats can be chosen through command line options, see "Output generation", below.

Options:

General

--help
Print this text and terminate.
--7z-input-file-password value
Password to decrypt password-protected 7ZIP input files.
--zip-input-file-password value
Password to decrypt password-protected zip archive entries.
--password value
All of the above.

File selection

--path glob
Process only matching files/entries, e.g."dir/file.zip!dir/file" or "**/file". See also "Globs", below.
--look-into format-glob:path-glob
Look into compressed and archive contents if its format matches format-glob and its path matches the path-glob. The default is to look into any recognised archive or compressed contents.
Supported archive formats in this runtime configuration are:
${archive.formats}
Supported compression formats in this runtime configuration are:
${compression.formats}
--path-equivalence path-regex
--pe path-regex
Files with different names map iff their names match the path-regex and all capturing groups are equal. May be given more than once.
--ne path-regex
Deprecated - Equivalent with "--path-equivalence path-regex".
--no-recurse-subdirctories
Don't recurse through subdirectories; just compare the existence of subdirectories.

Content processing

--disassemble
--da
Disassemble .class files.
--da-verbose
When disassembling .class files, include a constant pool dump, constant pool indexes, and hex dumps of all attributes in the disassembly output.
--da-source-directory directory
When disassembling .class files, look for source files in this directory. Source file loading is disabled by default.
--da-no-lines
When disassembling .class files, don't display lines debug info.
--da-no-vars
When disassembling .class files, don't display local variables debug info.
--da-symbolic-labels
When disassembling .class files, use symbolic labels /'L12') instead of numeric labels ('#123').
--line-equivalence path-pattern line-regex
Lines in files path-pattern that contain line-regex and all capturing groups are equal are regarded as equal.
--ignore path-pattern line-regex
-I path-pattern line-regex
Ignore differences in files path-pattern where all lines (deleted, changed or added) match the given line-regex.
--ignore-whitespace
-w
Ignore whitespace differences.
--added-file REPORT|COMPARE_WITH_EMPTY|IGNORE
--deleted-file REPORT|COMPARE_WITH_EMPTY|IGNORE
How to deal with added resp. deleted files:
REPORT (the default):
Print "File added path", resp. "File deleted path" (or, with "--exist" or "--brief", print "+ path" resp. "- path").
COMPARE_WITH_EMPTY:
Generate a diff document by comparing with the empty document.
IGNORE:
Do nothing.
--new-file
-N
Treat absent files as empty. This is shorthand for "--added-file COMPARE_WITH_EMPTY --deleted-file COMPARE_WITH_EMPTY".
--unidirectional-new-file
Treat added files as (previously) empty; deleted files are only reported. This is shorthand for "--added-file COMPARE_WITH_EMPTY --deleted-file REPORT".
--unchanged-files
Also report unchanged files.
--encoding charset-name
Encoding of the files being compared (defaults to the JVM default charset, "${file.encoding}").

Output generation

--out output-file
Write DIFF to output-file instead of STDOUT.
--normal
Output "normal diff format"; this is the default.
--exist
Report only which files were added or deleted (do not report changed content).
--brief
-q
Report only which files were added, deleted or changed.
--context
-c
Output "context diff format" with three lines of context.
--Context amount
-C amount
Output "context diff format" with amount lines of context.
--unified
-u
Output "unified diff format" with three lines of context.
--Unified amount
Output "unified diff format" with amount lines of context.
--keep-going
Report errors and continue with next file.
--sequential
Scan directories strictly sequentially. The default is to parallelize the directory scan in multiple threads.
--java-tokenization
Regard documents as streams of Java tokens; the whitespace between tokens (including line breaks) is then insignificant.
--ignore-c-style-comments
Don't regard C-style comments ("/* ... */") as relevant for comparison.
--ignore-c++-style-comments
Don't regard C++-style comments ("// ...") as relevant for comparison.
--ignore-doc-comments
Don't regard doc comments ("/** ... */") as relevant for comparison.
--nowarn
Suppress all output except errors.
--quiet
Suppress "normal" output; print only errors and warnings.
--verbose
Print verbose messages.
--debug
Print verbose and debug messages.
--log level:logger:handler:formatter:format
Add logging at level FINE on logger "de.unkrig" to STDERR using the FormatFormatter and SIMPLE format, or the given arguments (which are all optional).

Globs

A glob can have the form

   *~*.c~*.h,foo.c

, which means "foo.c plus all that don't end with .c or .h".

Example globs:

dir/file
File "file" in directory "dir".
file.gz%
Compressed file "file.gz".
file.zip!dir/file
Entry "dir/file" in archive file "file.zip".
file.tar.gz%!dir/file
Entry "dir/file" in the compressed archive file "file.tar.gz".
*/x
File "x" in an immediate subdirectory.
**/x
File "x" in any subdirectory.
***/x
File "x" in any subdirectory, or any entry "**/x" in any archive file in any subdirectory.
a,dir/file.7z!dir/b
File "a" and entry "dir/b" in archive file "dir/file.7z".
~*.c
Files that don't end with ".c".
~*.c~*.h
Files that don't end with ".c" or ".h".
~*.c~*.h,foo.c
"foo.c" plus all files that don't end with ".c" or ".h".