比较两台未连接计算机上的文件夹

比较两台未连接计算机上的文件夹

我想比较两台不同计算机上的文件夹。

我正在使用 BitTorrent Sync 在两台计算机之间同步当前 260 GB 的数据:一台 Windows 7 台式电脑和一台 Windows 8.1 笔记本电脑。所有这些数据都位于一个目录层次结构中,根文件夹名为“stuff”。

我注意到台式电脑报告的文件大小和文件数量与笔记本电脑报告的文件大小和文件数量存在明显差异。

现在我想使用一个工具来比较台式电脑的“stuff”目录和笔记本电脑的“stuff”目录,以便找出丢失和更改的文件和文件夹。两台计算机无法通过网络访问彼此的文件系统,但可以通过 USB 闪存驱动器将一台计算机的文件夹结果传输到另一台计算机。

答案1

即使您无法比较文件,解决方案也是比较它们的哈希值。

一个工具是免费的开源md5deep

md5deep 是一组程序,用于计算任意数量文件的 MD5、SHA-1、SHA-256、Tiger 或 Whirlpool 消息摘要

md5deep 能够递归检查整个目录树。也就是说,计算目录下每个文件以及每个子目录下每个文件的 MD5。

md5deep 可以接受已知哈希列表并将其与一组输入文件进行比较。该程序可以显示与已知哈希列表匹配或不匹配的输入文件。

还有许多其他类似的程序。快速谷歌搜索发现:

哈希我的文件
微型哈希器
校验和

或者甚至可以查看维基百科文章中的长列表 文件验证软件比较

答案2

@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"

相关内容