tar 文件中的哈希文件

tar 文件中的哈希文件

我有两个*.tar内容相似的文件。我想验证哪些文件是相同的。很多文件都很大,因此比较哈希值需要从每个 tar 中提取每个文件并计算哈希值。有没有办法在不提取 tar 的情况下对 tar 中的文件进行哈希处理?还有其他方法可以比较两个*.tar文件之间的文件吗?

答案1

如果是 GNU tar,请运行以下命令:

tar -xf file1.tar --to-command=file-stats-from-tar

其中 file-stats-from-tar 位于某处$PATH并且是:

#!/bin/bash

md5=`md5sum`;
md5=${md5%% *}

printf "%s\t%s\n" $md5 "$TAR_FILENAME"

md5sum如果需要的话就改变。

只需一次即可完成所有操作。

它的工作原理是该--to-command选项告诉 tar 发送每个文件单独添加到您指定的命令中,并设置一堆环境变量(我们只TAR_FILENAME在这里使用)。

答案2

可能有更有效的方法,但我很快就想出了这个:

tar tf test.tar | while read x ; do echo "$(tar xfO test.tar ${x} | md5sum) ${x}" ; done

第一个tar tf只是列出存档中的文件,然后将其传递到while read xbash 循环中。对于每个文件名,它使用 找到哈希值。tar xfO test.tar ${x} | md5sum显然,你可以用你喜欢的哈希工具替换 md5sum。 的奇怪用法echo $() ${x}只是为了保持输出类似于常规哈希输出,左侧是值,右侧是文件名。如果没有它,它只会给你所有文件的哈希值,但没有名称,所以你无法分辨哪个文件去了哪个文件。即使有它,-输出中也会有一个通常不存在的额外列。可以使用colrm管道中的命令轻松将其删除。

这可能不是最有效的,因为如果 tar 文件中有 n 个文件,它就必须遍历 tar 文件 n+1 次,但希望在第一次读取后 tar 内容被缓存。

相关内容