1

我正在用python编写一个脚本,用于将静态站点部署到aws(s3、cloudfront、route53)。因为我不想在每次部署时都上传每个文件,所以我通过比较它们的 md5 散列和它们的电子标签(s3 设置为对象的 md5 散列)来检查哪些文件被修改。这适用于所有文件,除了我的构建脚本在上传之前 gzip 压缩的文件。查看文件内部,gzip 似乎并不是真正的纯函数;每次运行 gzip 时,输出文件都会有非常细微的差异,即使源文件没有更改。

我的问题是:在给定完全相同的输入的情况下,有什么方法可以让 gzip 可靠且可重复地输出完全相同的文件?还是我最好检查文件是否已压缩,解压缩并计算 md5 哈希/手动设置电子标签值?

4

2 回答 2

2

压缩后的数据每次都是一样的。唯一不同的可能是标头中的修改时间。的第五个参数GzipFile(如果您正在使用)允许您在标头中指定修改时间。第一个参数是文件名,它也包含在标题中,因此您希望保持相同。如果您为源数据提供第四个参数,则第一个参数仅用于填充标题的文件名部分。

于 2012-12-22T17:04:04.107 回答
-1

gzip 不稳定,正如您正确计算的那样:

[root@dev1 ~]# touch a b
[root@dev1 ~]# gzip a
[root@dev1 ~]# gzip b
[root@dev1 ~]# md5sum a.gz b.gz
8674e28eab49306b519ec7cd30128a5c  a.gz
4974585cf2e85113f1464dc9ea45c793  b.gz
于 2012-12-22T11:20:20.520 回答