PathFingerprint allows you to recursively generate hashes for a directory structure. While doing this, it builds a catalog in a separate directory to serve as a cache. Subsequent runs of large directories will run much quicker. You can also do simple lookups against an existing catalog and generate/print a report of what has changed since the last run.
Build a test directory:
$ mkdir -p scan_path/subdir1 $ mkdir -p scan_path/subdir2 $ touch scan_path/subdir1/aa $ touch scan_path/subdir1/bb
Calculate the hash (with reporting enabled):
$ pfhash -s scan_path -c catalog_path -R - create file subdir1/aa create file subdir1/bb create path subdir1 create path subdir2 create path . 0df9bc5a7657b7d481c219656441f10d21fd5668
Run again with a couple of changes (with reporting enabled):
$ touch scan_path/subdir1/aa $ touch scan_path/subdir2/new_file $ pfhash -s scan_path -c catalog_path -R - update file subdir1/aa create file subdir2/new_file update path subdir2 update path . e700843c1b5c2f40a68098e1df96ef08b6081fe8
Lookup the hash using the lookup tool:
$ pflookup -c catalog_path e700843c1b5c2f40a68098e1df96ef08b6081fe8 $ pflookup -c catalog_path -r subdir1 426a98d313a0a740b8445daa5102b3ed6dd7f4ed $ pflookup -c catalog_path -r subdir1/aa da39a3ee5e6b4b0d3255bfef95601890afd80709