nev*_*nd9 13 storage data integrity
我将数千个文件复制到 exFAT MicroSD 卡中。
文件数和字节数相同,但如何知道数据是否损坏?
如果 JackPal Android 终端也支持该命令就好了。
xen*_*oid 19
使用 MD5 sums 是一个好方法,但使用它的规范方法是:
cd
到源文件的目录并发出:
md5sum * >/path/to/the/checksumfile.md5
Run Code Online (Sandbox Code Playgroud)如果您有多个级别的目录,则可以使用shopt -s globstar
和替换*
为**/*
。
请注意,MD5 文件中的文件规范与命令行中提供的完全相同(相对路径,除非您的模式以 a 开头/
)。
cd
到复制文件的目录并发出:
md5sum -c /path/to/the/checksumfile.md5
Run Code Online (Sandbox Code Playgroud)使用-c
,md5sum
读取提供的 MD5 文件中的文件规范,计算这些文件的 MD5,并将它们与 MD5 文件中的值进行比较(这就是为什么文件规范通常最好保持相对,因此您可以重新使用 MD5文件在各种目录中的文件)。
以这种方式使用 MD5 sum 会立即告诉您有关 MD5 差异以及丢失文件的信息。
sou*_*edi 13
卸载、弹出和重新安装设备。然后使用
diff -r source destination
Run Code Online (Sandbox Code Playgroud)
如果你rsync
以前做副本,rsync -n -c
可能会很方便,而且几乎和diff
. 不过,它并没有进行逐位比较;它使用 MD5 校验和。
有一些类似的答案和其他详细信息:从一个硬盘驱动器复制到另一个后验证大目录
rsync -rc original-dir/ copied-dir/
Run Code Online (Sandbox Code Playgroud)
-c
导致 rsync 通过 MD5 校验和比较文件(没有它,它通常只使用时间戳和大小来进行更快的比较)。
这也将导致 rsync 复制它从目标中看到的不同或缺失的任何内容。为避免这种情况,您还可以使用-n
and -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)来访问解释该输出的部分。
除了上面的其他很好的答案之外,我还想建议考虑来自http://md5deep.sourceforge.net/的 hashdeep 。它在科学界拥有庞大的用户群,他们经常需要使用分散在数千个目录中的 TB 数据来执行此类操作。