复制数千个文件后检查数据完整性

nev*_*nd9 13 storage data integrity

我将数千个文件复制到 exFAT MicroSD 卡中。

文件数和字节数相同,但如何知道数据是否损坏?

如果 JackPal Android 终端也支持该命令就好了。

xen*_*oid 19

使用 MD5 sums 是一个好方法,但使用它的规范方法是:

  1. cd 到源文件的目录并发出:

    md5sum * >/path/to/the/checksumfile.md5
    
    Run Code Online (Sandbox Code Playgroud)

如果您有多个级别的目录,则可以使用shopt -s globstar和替换***/*

请注意,MD5 文件中的文件规范与命令行中提供的完全相同(相对路径,除非您的模式以 a 开头/)。

  1. cd 到复制文件的目录并发出:

    md5sum -c /path/to/the/checksumfile.md5
    
    Run Code Online (Sandbox Code Playgroud)

使用-c,md5sum读取提供的 MD5 文件中的文件规范,计算这些文件的 MD5,并将它们与 MD5 文件中的值进行比较(这就是为什么文件规范通常最好保持相对,因此您可以重新使用 MD5文件在各种目录中的文件)。

以这种方式使用 MD5 sum 会立即告诉您有关 MD5 差异以及丢失文件的信息。

  • 如果文件数达到数千,让外壳进行通配符扩展可能会引起麻烦。使用`find -exec` 更安全。 (7认同)

sou*_*edi 13

卸载、弹出和重新安装设备。然后使用

diff -r source destination
Run Code Online (Sandbox Code Playgroud)

如果你rsync以前做副本,rsync -n -c可能会很方便,而且几乎和diff. 不过,它并没有进行逐位比较;它使用 MD5 校验和。


有一些类似的答案和其他详细信息:从一个硬盘驱动器复制到另一个后验证大目录

  • @neverMind9 在 Android 上为 diff、rsync 等安装 Termux。 (3认同)

JoL*_*JoL 6

rsync -rc original-dir/ copied-dir/
Run Code Online (Sandbox Code Playgroud)

-c 导致 rsync 通过 MD5 校验和比较文件(没有它,它通常只使用时间戳和大小来进行更快的比较)。

这也将导致 rsync 复制它从目标中看到的不同或缺失的任何内容。为避免这种情况,您还可以使用-nand -i。前者确保 rsync 不做任何更改而只进行比较,后者使其显示它看到的差异。

例如,我有以下目录:

$ find dir1/ dir2/
dir1/ dir2/
dir1/
dir1/d
dir1/d/a
dir1/d/b
dir1/c
dir2/
dir2/d
dir2/d/a
dir2/d/b
Run Code Online (Sandbox Code Playgroud)

和这个:

$ rsync -rcni dir1/ dir2/
>f+++++++++ c
>fc.T...... d/b
Run Code Online (Sandbox Code Playgroud)

告诉我,通过所有这些+s,该文件c不存在于dir2,而 filed/b存在,但不同(由c第一列中的指示)。的T说,它的时间将被更新(如果我们没有使用-n)。

-i的输出格式在 rsync 的联机帮助页中描述。您可以man rsync通过键入/--itemize-changes$(并按 Enter)来访问解释该输出的部分。


don*_*ght 5

除了上面的其他很好的答案之外,我还想建议考虑来自http://md5deep.sourceforge.net/的 hashdeep 。它在科学界拥有庞大的用户群,他们经常需要使用分散在数千个目录中的 TB 数据来执行此类操作。


归档时间:

查看次数:

8180 次

最近记录:

6 年,7 月 前