递归地将 md5 文件与存储的 .md5 文件进行比较

递归地将 md5 文件与存储的 .md5 文件进行比较

MD5使用 .md5 文件对 167 个目录中的 3200 个文件进行校验的最佳方法是什么?md5sum其中所有哈希值都与已在每个目录中创建的 .md5 文件进行比较,该文件包含要进行校验和的文件。我还需要创建一个记录哪些文件未通过校验和验证,以便我可以尝试修复该问题。

编辑::如果可能的话,以利用 8 个 CPU 核心(2x 四核)的方式执行此操作将是一项资产,因为我将处理 1.1TB 的文件。

大部分目录结构是:

Root ->
        Subdir1 ->
                 File1
                 File2
                 File3
                 hashes.md5
        Subdir2 ->
                 File1
                 File2
                 File3
                 hashes.md5

尽管某些子目录可能还有进一步的子目录需要横向移动,例如:

Root ->
        Subdir1 ->
                 File1
                 File2
                 File3
                 hashes.md5
        Subdir2 ->
                 Sub-Subdir1 ->
                               File1
                               File2
                               File3
                               hashes.md5
                 File1
                 File2
                 File3
                 hashes.md5

从根目录开始搜索 *.md5 文件,然后根据文件中存储的哈希值验证文件夹的内容,最好的方法是什么?

此外,如果重要的话,哈希值以这种格式存储在 *.md5 文件中:

5a243a798037cbc7b458326a1e8ff263 *File1
1c3a6609e413bb32512e263f821b2dc4 *File2
49615cf8bf8f23680305e964f6d53f85 *File3
6eb73fa3065fbc220ac9569a98b84c79 *File4
d4f103bf06902e4dbeb67b6975ae08b8 *File5
26b5053e374d1d7262c528eca6426a3a *File6
f6ff252801fbeac6274e00b36a2b9725 *File7
22812abfa9a47131ee8e548747c0903b *File8
b19cd459aaaf07a0c69cda7931827338 *File9

文件名也可能有空格,例如“*File - some other details.ext”

答案1

您可以使用 find,例如:

find . -name hashes.md5 -execdir md5sum --quiet --check hashes.md5 \; > logfile

这将搜索名为“hashes.md5”的文件,然后转到找到的文件的目录并执行 md5sum。--quiet 告诉 md5sum 如果文件正常则不打印任何内容,只有当文件不正常时才打印

编辑:我不知道 find 是否会利用 8 个 CPU,可能不会。不过,您可以启动多个 find 实例,每个实例处理一组不同的子文件夹。

答案2

您可以使用程序 hashdeep (https://github.com/jessek/hashdeep)确实支持您想要的所有功能以及更多功能:

  • 附加哈希(sha1、sha256、tiger、whirlpool)

  • 每个文件超过 1 个哈希值

  • 三种匹配模式(审计模式(所有哈希必须匹配,没有新的或丢失的文件)、正匹配、负匹配)

  • 多线程

相关内容