.IR hash ]
.RI [ file
\&...]
+.br
+.B fshash
+.RB \-u
+.B \-c
+.I cache
+.RB [ \-H
+.IR hash ]
+.RI [ dir ]
.SH DESCRIPTION
The
.B fshash
-program generates digests of filesystems. It's similar in concept (but
-somewhat different from) Ian Jackson's
+program generates digests of filesystems. It's similar in concept to
+(but somewhat different from) Ian Jackson's
.BR summer (1)
tool.
.PP
.I hash
function, which can be any hash function supported by Python's
.BR hashlib .
-If this option may be omitted then the hash is read from the cache file;
-if there is no cache file either, then an error is reported.
+This option may be omitted: if it is, then the hash is read from the
+cache file; if there is no cache file either, then an error is reported.
+.TP
+.B \-u, \-\-udiff
+Rather than produce a manifest, read a unified
+.BR diff (1)
+from standard input, and clear from the cache all files mentioned as
+being different. Filenames in the diff are considered relative to
+.I dir ,
+defaulting to the current working directory.
.PP
Positional arguments are interpreted as files and directories to be
processed, in order. A directory name which ends in
object type and any special information about it, in square brackets,
and padded with spaces so as to take the same width as a hash; see
below for details.
-as follows.
.hP 2.
A `virtual inode identifier': a string which will be the same in two
lines if and only if they represent hard links to the same underlying
.I Errors
If there was an error reading the object's metadata then the information
field shows
-.BI Enn
+.BI E nn
.IR message ,
and the other fields, except the name, are printed as
.B error
.BR symbolic-link .
The name is followed by
.RB ` \~\->\~ '
-and the link target (or by
+and the link target (or
.BI <E nn \~ message >
if there was an error reading the link destination).
.TP