我正在python中编写一个脚本,用于将静态站点部署到aws(s3,cloudfront,route53)。因为我不想在每次部署时上传每个文件,所以我通过比较他们的md5哈希与他们的e-tag(s3设置为对象的md5哈希)来检查修改了哪些文件。这适用于所有文件,除了我的构建脚本在上传之前gzips的文件。看看文件内部,似乎gzip并不是一个真正的纯函数;每次运行gzip时输出文件都会有轻微差异,即使源文件没有更改。
我的问题是:有没有办法让gzip在给定完全相同的输入的情况下可靠且可重复地输出完全相同的文件?或者我最好只检查文件是否被压缩,解压缩并计算md5哈希/手动为其设置电子标签值?
答案 0 :(得分:2)
每次压缩数据都相同。唯一不同的是标题中的修改时间。 GzipFile
的第五个参数(如果这是您正在使用的那个)允许您在标题中指定修改时间。第一个参数是文件名,它也在标题中,因此您希望保持相同。如果为源数据提供第四个参数,则第一个参数仅用于填充标题的文件名部分。
答案 1 :(得分:-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