有什么简单的方法可以检查两个不同的目录是否具有完全相同的内容?
答案1
find
、sha1sum
和一系列管道的组合可以实现这一目标:
find /path/to/files -type f -print0 | sort -z | xargs -0 sha1sum | cut -c1-40 | sha1sum
这将给你如下输出:
98f3a7c54a8f51dd86506a26d4d3bd90e6e4b821 -
笔记:当然,结尾的破折号可以忽略。
在您想要检查的路径上运行此命令,您将看到两个目录是否相同。如果不相同,您可以开始编辑命令以查找不同的文件。一种简单但耗时的方法是删除 ,它将| cut -c1-40 | sha1sum
列出每个文件及其相应的 sha1 哈希。
这是如何运作的?
解释 | |
---|---|
find /path/to/files |
/path/to/files 返回目录中的项目列表 |
-type f |
仅包含文件 |
-print0 |
在标准输出上打印完整文件名,后跟一个空字符 |
| |
进而 |
sort -z |
对列表进行排序,使用 null 作为行分隔符,而不是换行符 |
| |
进而 |
xargs -0 sha1sum |
运行列表中的每个值sha1sum |
| |
进而 |
cut -c1-40 |
拿只是前 40 个字符(sha1 的长度 |
| |
进而 |
sha1sum |
生成 sha1 列表的 sha1 哈希值 |