如何检查包含文件的文件夹的 md5?

如何检查包含文件的文件夹的 md5?

我想比较本地文件夹和服务器上的文件夹,文件夹可以包含子文件夹,子文件夹可以包含文件。

如何计算整个文件夹的 md5sum?

更新:

一种可能的解决方案不是计算整个文件夹的哈希值,而是计算每个文件的哈希值,然后比较哈希值列表。

假设我们要比较文件夹ab

tree .
.
├── a
│   ├── 1.txt
│   └── d
│       └── 2.txt
└── b
    └── 1.txt

这可以显示出差异:

find a -type f | sort | xargs md5 -r | cut -f1 -d " " > a.txt
find b -type f | sort | xargs md5 -r | cut -f1 -d " " > b.txt
git diff --no-index a.txt b.txt

但是如何检查哪个文件对应于某个文件夹中缺少的哈希值?

如果我

cd a
find . -type f | sort | xargs md5 -r > ../a.txt
cd ..
cd b
find . -type f | sort | xargs md5 -r > ../b.txt
cd ..
git diff --no-index a.txt b.txt

这解决了一个问题,但可能不太优雅。

答案1

其他答案中使用 zip 的解决方案看起来不错,但对我来说有一些缺点,它需要压缩文件,不显示哪个文件不同。

因此,我将提供一个示例解决方案:

cd /target/directory
md5sum * >/tmp/tmp_file

如果你有子目录和文件,并且想包含这些文件,请使用

cd /target/directory
find . -type f -exec md5sum {} \; >/tmp/tmp_file

转移tmp_file到其他服务器并在那里执行

cd /remote_target/directory
md5sum -c /tmp/tmp_file

(如果tmp_file在目录中传输/tmp)你会看到如下输出:

[root@rh1 sssd]# md5sum -c /tmp/a
./sssd.log: OK
./sssd_implicit_files.log: OK
./sssd_nss.log: OK
./a/aa: OK

答案2

使用 rhash 将 md5 哈希值输出到文件。

$ rhash -Mr -o /path/to/md5sum .

验证文件的哈希值。

$ rhash -c /path/to/md5sum

拉什选项:

  • -MMD5:计算并打印 MD5 哈希值。
  • -r递归处理命令行指定的目录。
  • -o 设置文件以输出计算的哈希值和验证结果。
  • -c检查命令行指定的哈希文件。

将目录结构保存到同一个文件。

$ find -type d -printf "; %P\n" >> /path/to/md5sum1

逐行比较文件。

$ diff md5sum1 md5sum2

相关内容