如何对目录进行哈希处理

如何对目录进行哈希处理

我想测试我正在创建的流程每次是否产生相同的输出。

我想通过创建文件夹内容的哈希来实现这一点。但这不应考虑文件修改时间或任何 .DS_Store/thumbs.db 类型的文件。

我怎样才能做到这一点?

答案1

我认为您的意思是有一个考虑目录中所有文件的单一哈希。

find . -name thumbs.db -prune -o -type f -exec cat {} \; | shasum -

注意我首先尝试使用 tar,但大多数存档格式都包含时间戳,因此不会给您想要的结果。

为了测试这一点,我选择了一个源目录并为其生成了 sha,如下所示。请注意,我缩短了生成此示例的 sha 的命令,仅当您需要排除某些文件时才使用“-name thumbs.db -prune -o”。

$ find Temp\ 20060810/ -type f | wc -l
    7207
$ du -hs Temp\ 20060810/
3.6G    Temp 20060810/
$ (cd ../Temp\ 20060810/ && find . -type f -exec cat {} \;  | shasum -)
f35837a72e7c94c974ed76723ac4fcff39e62646  -

然后我使用不同的技术创建了一些副本:

$ cp -r Temp\ 20060810/ ~/tmp/TEST1
$ (cd Temp\ 20060810/ && tar -cf - .) | (mkdir ~/tmp/TEST2 && tar -C ~/tmp/TEST2 -xf - )
$ rsync -a Temp\ 20060810/ ~/tmp/TEST3/
$ cp -aL Temp\ 20060810/ ~/tmp/TEST4/

最后,将副本的哈希值与原始文件的哈希值进行比较:

$ (cd ~/tmp/TEST1 && find . -type f -exec cat {} \; | shasum -)
f35837a72e7c94c974ed76723ac4fcff39e62646  -
$ (cd ~/tmp/TEST2 && find . -type f -exec cat {} \; | shasum -)
f35837a72e7c94c974ed76723ac4fcff39e62646  -
$ (cd ~/tmp/TEST3 && find . -type f -exec cat {} \; | shasum -)
f35837a72e7c94c974ed76723ac4fcff39e62646  -
$ (cd ~/tmp/TEST4 && find . -type f -exec cat {} \; | shasum -)
f35837a72e7c94c974ed76723ac4fcff39e62646  -

相关内容