我通常用一些临时名称来命名文件,然后根据需要重命名。
现在我在不同位置有两个同名的目录,它们的大小和文件数量相同,但文件的名称不同。
所以,我的问题是如何知道这个目录是否与那个目录相同?
答案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
和管道,将输出推送到同一个文件,并使用和管道打印文件以进行比较:sort
cat
sort
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