我通常用一些临时名称来命名文件,然后根据需要对其进行重命名。
现在我在不同位置有两个同名的目录,文件大小和数量相同,但文件名称不同。
所以,我的问题是如何知道这个目录是否与那个目录相同?
据我了解,我找到了解决方案:仅查找两个目录中的文件,获取每个文件的 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
Run Code Online (Sandbox Code Playgroud)
之后,您可以比较生成的文件:
diff /tmp/hashes_dir1 /tmp/hashes_dir2
Run Code Online (Sandbox Code Playgroud)
如果上面的输出为空,则两个目录的文件具有相同的内容。如果不是(例如,仅在一个目录中存在重复文件),则输出将不为空。
编辑:此外,您可以看到相应的文件从前两个命令中
切断了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
Run Code Online (Sandbox Code Playgroud)
相应的文件将一个接一个地出现。
Edit2:查看它是如何工作的:http://pastebin.com/dW7LrZkR