检查两个目录是否具有相同的内容

检查两个目录是否具有相同的内容

我通常用一些临时名称来命名文件,然后根据需要重命名。

现在我在不同位置有两个同名的目录,它们的大小和文件数量相同,但文件的名称不同。

所以,我的问题是如何知道这个目录是否与那个目录相同?

答案1

据我了解,我找到了解决方案:仅查找两个目录中的文件,获取每个文件的 md5 哈希值,排序,然后验证哈希值是否匹配。

在 bash 中,您可以使用 find 和参数从目录(包括子目录)获取所有文件,-type f以仅获取文件,并-exec md5sum {} \;从文件中获取 MD5 哈希值。这样,您必须截断文件名并排序,使用|cut -d\ -f1|sort对生成的哈希值进行排序。对两个目录都使用此方法,并将输出推送到每个目录的文件中:

find path/to/dir1 -type f -exec md5sum "{}" \; |cut -d\  -f1 |sort > /tmp/hashes_dir1
find path/to/dir2 -type f -exec md5sum "{}" \; |cut -d\  -f1 |sort > /tmp/hashes_dir2

此后,您可以比较生成的文件:

diff /tmp/hashes_dir1 /tmp/hashes_dir2

如果上述输出为空,则表示两个目录的文件内容相同。如果不是(例如只有一个目录中有重复的文件),则输出将不为空。

编辑:此外,您可以看到相应的文件从前两个命令中 切断cut和管道,将输出推送到同一个文件,并使用和管道打印文件以进行比较:sortcatsort

find path/to/dir1 -type f -exec md5sum "{}" \; > /tmp/hashes_dir
find path/to/dir2 -type f -exec md5sum "{}" \; >> /tmp/hashes_dir
cat /tmp/hashes_dir |sort

相应的文件将会一个接一个地出现。

編輯2:查看其工作原理:http://pastebin.com/dW7LrZkR

相关内容