Подсказка @ harrymc для использования md5deep/hashdeep хорошо работает для меня. Ниже приведен способ использования hashdeep64 для сравнения иерархии каталогов между двумя компьютерами:
# computer A == computer on which a hashlist.txt for all files in someFileHierarchysTopDirectoryOnComputerA is generated
# computer B == computer on which computer A's generated hashlist.txt is used to compare files. Computer B generates a hashcompareresult.txt
# On computer A, create a hashlist.txt for some file hierarchy located in directory someFileHierarchysTopDirectoryOnComputerA. hashlist.txt will be placed in someFileHierarchysTopDirectoryOnComputerA's parent directory.
cd someFileHierarchysTopDirectoryOnComputerA
hashdeep64 -c md5 -r -l -e -vvv * | tee ../hashlist.txt
# this probably will take some time to finish.
# Now copy the generated hashlist.txt onto computer B's "someFileHierarchysTopDirectoryOnComputerB/.." directory. Then on computer B,
cd someFileHierarchysTopDirectoryOnComputerB
hashdeep64 -c md5 -r -l -k ../hashlist.txt -a -e -vvv * | tee ../hashcompareresult.txt
# hashdeep's -w, -W, -x, and -X modes don't seem to report errors on missing and additional files. Therefore using -a mode.
# Above command will have generated a file hashcompareresult.txt in someFileHierarchysTopDirectoryOnComputerB's parent directory.
# Now filter the created hashcompareresult.txt for mismatches:
cat ../hashcompareresult.txt | grep -E ": No match|: Known file not used"
# The resulting output shows files that
# * exist only on computer A, or
# * exist only on computer B, or
# * exist on both computers at the same location but have different MD5 hashes.
# Depending on the use case, above command probably will report some false positive files and directories, e.g. desktop.ini, Thumbs.db, .DS_Store, __MACOSX, .sync, and .SyncArchive .
# It may be adequate to filter out these file system entries, e.g. with
# cat ../hashcompareresult.txt | grep -E ": No match|: Known file not used" | grep -v -E "desktop.ini|Thumbs.db|.DS_Store|__MACOSX|.sync|.SyncArchive"