我正在寻找一种快速比较目录内容的方法。是否可以对整个目录进行 md5sum(或等效校验和)?
使用 Ubuntu Linux
答案1
当然 -md5sum directory/*
如果您需要更灵活的功能(例如,用于目录递归或哈希比较),请尝试 md5deep。
apt-get install md5deep
md5deep -r directory
要比较目录结构,您可以给它一个哈希列表以供比较:
md5deep -r -s /directory1 > dir1hashes
md5deep -r -X dir1hashes /directory2
这将输出目录 2 中所有与目录 1 不匹配的文件。
这不会显示已从目录 1 中删除的文件或已添加到目录 2 的文件。
答案2
如果您想查看两个目录之间有什么不同(如果有的话),rsync 将是一个不错的选择。
rsync --archive --dry-run --checksum --verbose /source/directory/ /destination/directory
这将列出所有不同的文件。
答案3
我想我之前回答过这个问题:
find . -xtype f -print0 | xargs -0 sha1sum | cut -b-40 | sort | sha1sum
给出:b1a5b654afee985d5daccd42d41e19b2877d66b1
这个想法是,你对所有文件进行哈希处理,每行切出一个哈希值,对它们进行排序,然后进行哈希处理,得到一个哈希值。这并不依赖于文件的名称。
答案4
我使用了 hashdeep,正如这个 askubuntu 答案中解释的那样: 检查复制文件的正确性:
要计算校验和:
$ cd <directory1>
$ hashdeep -rlc md5 . > ~/hashOutput.txt
验证并列出差异:
$ cd <directory2>
$ hashdeep -ravvl -k ~/hashOutput.txt .
hashdeep: Audit passed
Input files examined: 0
Known files expecting: 0
Files matched: 13770
Files partially matched: 0
Files moved: 0
New files found: 0
Known files not found: 0
这比 md5deep 有一个优势,因为它会显示重命名(移动)、添加和删除的文件,同时避免了在底部指出 0 长度文件的问题http://www.meridiandiscovery.com/how-to/validating-copy-results-using-md5deep。