我经常有大目录想要从服务器传输到本地计算机。而不是使用递归scp或rsync目录本身,我会经常先tar和gzip它,然后再转移它。
最近,我想检查,这其实是工作,所以我跑了两个独立产生的md5sumtar和gzip相同的源目录中的档案。令我惊讶的是,MD5 哈希值是不同的。我又做了两次,这总是一个新的价值。为什么我看到这个结果?使用相同版本的 GNU tar 以完全相同的方式生成的两个 tar 和 gzipped 目录是否不应该完全相同?
为清楚起见,我有一个源目录和一个目标目录。在目标目录中,我有 dir1 和 dir2。我在跑:
tar -zcvf /destination/dir1/source.tar.gz source && md5sum /destination/dir1/source.tar.gz >> md5.txt
tar -zcvf /destination/dir2/source.tar.gz source && md5sum /destination/dir2/source.tar.gz >> md5.txt
Run Code Online (Sandbox Code Playgroud)
每次我这样做时,我都会从 md5sum 得到不同的结果。Tar 不会产生错误或警告。
Ste*_*itt 12
从事物的外观来看,您可能会被gzip时间戳咬住;为了避免这些,运行
GZIP=-n tar -zcvf ...
Run Code Online (Sandbox Code Playgroud)
请注意,要获得完全可重现的 tarball,您还应该强制使用以下排序顺序tar:
GZIP=-n tar --sort=name -zcvf ...
Run Code Online (Sandbox Code Playgroud)
如果您的版本tar不支持--sort,请改用:
find source -print0 | LC_ALL=C sort -z | GZIP=-n tar --no-recursion --null -T - -zcvf ...
Run Code Online (Sandbox Code Playgroud)