我的版本化项目使用上游 tarball 的内容。我想以能够准确地重新创建原始 tarball 的方式提取内容。原因是我不想在我的版本化项目中包含大的二进制 blob。延迟是不可靠的,通常会产生略有不同的 tarball。我怀疑压缩算法启发式在不同条件下会产生不同的结果。
编辑:使解决方案变得困难的另一个问题是某些版本控制系统 (git) 不跟踪空目录,因此排除了不涉及创建辅助元数据文件的解决方案。见我对豪克的评论。(感谢 Hauke 的这次编辑)。
重新压缩文件可能会产生不同的存档,因为将文件附加到存档的顺序tar
不一定稳定。为了确保文件按照原来的顺序重新压缩,请列出存档中的文件并将该列表保存到文件中:
tar -tf your-archive.tar > file-list.txt
Run Code Online (Sandbox Code Playgroud)
然后通过从您之前创建的列表中读取要添加的文件,以完全相同的顺序重新打包它们(因为该列表也可以包含目录,并且我们不想在此时深入到它们,所以我们需要)--no-recursion
:
tar -cf your-new-archive.tar --no-recursion -T file-list.txt
Run Code Online (Sandbox Code Playgroud)
假设没有任何文件(或其属性)发生更改,your-new-archive.tar
将与your-archive.tar
.
然而,在创建压缩档案时您会遇到一个问题:默认情况下,gzip
会为其创建的每个压缩文件添加一个时间戳。为了避免这种情况,您必须将tar
的输出通过管道传输到gzip
(而不是使用 的tar
开关-z
)并使用以下命令禁用时间戳-n
:
tar -c --no-recursion -T file-list.txt | gzip -n > your-new-archive.tar.gz
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1780 次 |
最近记录: |