如何验证两个 tar.gz 文件是否相同

问题描述 投票:0回答:1

我正在制定共享协议,当您共享文件夹时,它会被 tar.gz 压缩并插入到文件夹中。

它是这样创建的:

with tarfile.open(full_data_name, "w:gz", format=GNU_FORMAT) as tar_handle:
   ...
   tar_handle.add(file_path)

当您再次执行此操作时,我想验证并检查新的 tar.gz 是否与旧的相同(因此我不需要重新发布它)。

我知道 pkgdiff 并且工作正常,但我想用 python 来做。

我也知道我可以手动完成,解压和压缩文件,加载内容并逐字节验证,但是没有一些更简单且资源消耗更少的方法吗?

我尝试只检查 tar.gz 文件的内容(删除字节 4-7 处的时间戳),但这仅有时有效,所以我猜 tar 部分中存在一些随机重新排列,或者 gz 中存在一些随机性,正如 pkgdiff 所说,它们是相同的,但十六进制编辑器显示出很多差异。

python python-3.x gzip tar
1个回答
0
投票

您可以提取内存中的文件并计算校验和。这可以避免物理提取整个存档。

import tarfile
import hashlib

def get_tar_checksum(tar_path):
    with tarfile.open(tar_path, "r:gz") as tar:
        checksums = {}
        for member in tar.getmembers():
            if member.isfile():
                file_data = tar.extractfile(member).read()
                checksums[member.name] = hashlib.sha256(file_data).hexdigest()
    return checksums


def tar_equal(tar_path1, tar_path2):
    return get_tar_checksum(tar_path1) == get_tar_checksum(tar_path2)

# Usage
tar1 = "path/to/first.tar.gz"
tar2 = "path/to/second.tar.gz"

if tar_equal(tar1, tar2):
    print("The tar.gz files are identical.")
else:
    print("The tar.gz files are different.")

如果比较的 tar 相同,则

tar_equal(tar_path1, tar_path2)
方法将返回
True
。您可以从那里实现您的逻辑。

© www.soinside.com 2019 - 2024. All rights reserved.