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 个哈希值
三种匹配模式(审计模式(所有哈希必须匹配,没有新的或丢失的文件)、正匹配、负匹配)
多线程