Usage: java -jar ddiff.jar [-h] [-H] [-s] [-e] [-p] [-c] [-l] [-L] [-t c] \ [-g pe] [-G file] [-r pe] [-R file] dirA dirB ddiff mimics diff functionality for directories instead of file contents. It requires JDK or JRE 1.7 or better. Distinguished entry types are: f regular file F symlink to a regular file d directory D symlink to a directory o neither a symlink, nor a file, nor a directory O symlink to an entry, which is neither a symlink, nor a file, nor a dir L symlink to another symlink I symlink to an entry, which can not be stated ? unknown, i.e. unable to determine the type of the entry The following markers denote the entry difference: < the entry occures in dirB, but NOT in dirA > the entry occures in dirA, but not in dirB t type differs | the file content differs l the symlink content differs = Identical entry. Expression have to be specified in Java dialect - see http://java.sun.com/javase/7/docs/api/java/nio/file/FileSystem.html for globbing path expressions, for java regular expressions http://java.sun.com/javase/7/docs/api/java/util/regex/Pattern.html If the content of files gets compared, bytewise comparision will be used. ddiff treats hard links as normal file/directory entry. Furthermore all pathes which are not of type file or directory or link are handled as type other, whoms content gets never compared to its counter part. ddiff compares all path components as String, which may lead to unexpected results, if a directory is on an ancient filesystem, which is e.g. case-insensitive or technically spoken, where the follwing expression is true: pathA.getName().equals(pathB.getName()) ^ pathA.getName().toString().equals(pathB.getName().toString()) -s short, i.e. dont list the content of directories, which are not part of the other side, but the dir entry, only. -e print identical entries, i.e. entries found on both sides. For directories '=' implies just the same names, but the descants aka content of both directories may differ. For symlinks '=' implies per default: same name and points to the same type of dir entry. Further comparisions depend on option -l as well as -c. -p parseable output, i.e. don't pad with spaces and omit header -t c character to use to separate fields in parseable output (otherwise ignored). Default is a Comma (,). -L follow symlinks, i.e. resolve links to the final target -c compare the content of files as well -l compare the content of symlinks as well. Has no effect if -L aka 'follow symlinks' is set or one side is not a symlink -g pe ignore all pathes, which match the given globbing path expression May occure multiple times. The 'glob:' prefix can be omitted. -G file ignore all pathes, which match the globbing path expression listed line by line in the given file. May occure multiple times. The 'glob:' prefix can be omitted. -r re ignore all pathes, which match the given java regular expression. May occure multiple times. -R file ignore all pathes, which match the java regular expression listed line by line in the given file. May occure multiple times. -H ignore hidden entries, i.e. entries starting with a dot (.) -h print this help and exit. NOTE: Right now the Linux implementation of NIO2 especially the fdopendir native call seems to be buggy/unsupported. If you get the related java.lang.InternalError, insert the -Ddir.stream.bug=true option before the -jar option. ddiff v1.0.0 b399 (C) 2009 by Jens Elkner