cksum /path/to/folder/* | tee -a hash.files.txt |cut -f 1 -d " " >>hash.list.txt #extracts pure hashsum string only for the output, to hide the different file path.
md5sum hash.list.txt
…或使用单个命令:
cksum /path/to/folder/* | tee -a hash.files.txt | cut -f 1 -d " " | tee -a hash.list.txt | sort | md5sum
使用 MD5 sums 是一个好方法,但使用它的规范方法是:
cd
到源文件的目录并发出:如果您有多个级别的目录,则可以使用
shopt -s globstar
并替换*
为**/*
.请注意,MD5 文件中的文件规范与命令行中提供的完全一样(相对路径,除非您的模式以 开头
/
)。cd
到复制文件的目录并发出:使用
-c
,md5sum
读取提供的 MD5 文件中的文件规范,计算这些文件的 MD5,并将它们与 MD5 文件中的值进行比较(这就是为什么文件规范通常最好保留相对,因此您可以重复使用 MD5各种目录中的文件上的文件)。以这种方式使用 MD5 sum 会立即告诉您 MD5 的差异以及丢失的文件。
卸载、弹出和重新安装设备。然后使用
如果你
rsync
以前做副本,rsync -n -c
可能会很方便,几乎和diff
. 不过,它并没有进行逐位比较。它使用 MD5 校验和。在从一个硬盘驱动器复制到另一个硬盘驱动器后验证大目录有一些类似的答案和其他详细信息
-c
导致 rsync 通过 MD5 校验和比较文件(没有它,它通常只使用时间戳和大小来进行更快的比较)。这也将导致 rsync 复制它看到的与目标不同或丢失的任何内容。为避免这种情况,您还可以使用
-n
and-i
。前者确保 rsync 不做任何更改而只进行比较,后者使其显示它看到的差异。例如,我有以下目录:
和这个:
通过所有这些
+
s 告诉我,该文件c
不存在于 中dir2
,而 filed/b
存在,但不同(由c
第一列中的 表示)。T
说是时候更新了(如果我们没有使用)-n
。的输出格式
-i
在 rsync 的手册页中有描述。您可以通过键入(并按 Enter)进入man rsync
解释该输出的部分。/--itemize-changes$
除了上面的其他很好的答案,我还建议考虑来自http://md5deep.sourceforge.net/的 hashdeep 。它在科学界拥有庞大的用户群,他们经常不得不用分散在数千个目录中的 TB 数据来做这类事情。
可以为单个文件生成哈希和并将它们输出到一个文本文件中,其中可以生成 MD5 哈希。对于该文本文件,您可以使用您喜欢的任何散列函数,因为该散列列表的大小不足以在使用更硬的散列函数(例如
sha512sum
.我使用
cksum
它是因为它具有普遍可用性(sum
并且crc32
不包含在 JackPal 的 Android 终端中)和最高速度。它不是一种加密的、安全的算法sha512sum
,但任何散列函数都足以在离线环境中验证数据的完整性。但是,如果您希望所有文件哈希具有相同的长度(即 32),请使用md5sum
最快的普遍支持的安全哈希算法(虽然它较旧,但它比任何sha算法都快得多,并且可以完成它的工作)。在源和目标上运行这些命令:
…或使用单个命令:
hashsum 列表文件的名称(在我的示例中为hash.list.txt和hash.files.txt)可以是您指定的任何名称。生成两个文件以识别损坏的文件(第一个文件也包含文件名,第二个文件用于比较)。
sort
因为sh
和bash
实现字母排序略有不同。sort
补偿它。