tar提取也自动解压

tar提取也自动解压

当我跑步时

tar -cvzf archive.tgz file1 file2 ; rm file1 file2

它通常会创建一个压缩的 tarball,但是怎么可能

tar -xvf archive.tgz

给我返回未压缩的文件?我一直认为需要 -z 标志。

答案1

您的tar实现(可能是第一个)正在检测作为参数1压缩GNU传递的文件。

tar目前最常用的实现GNU tar是查看busybox文件的第一个字节(也称为幻数),以确定它是否被压缩以及要使用的压缩算法。

tar基于原始 AT&T 代码的商业 Unix 上的实现一开始就不支持该标志-z。一个值得注意的例外是 Solaris 11,tar其中添加了此扩展,包括检测文件格式的功能。

1 GNU tar 不会检测通过 stdin 传递的文件是否被压缩,正如另一篇文章中已经提到的回复SensorSmith 的评论

答案2

Star推出了自动压缩检测和自动解压aprox。 20年前。

如今,其他一些 tar 实现(例如 gtar)复制了这个想法。

顺便说一句:star 理解压缩流中的幻数以检测正确的解压缩方法。另请注意,当stdin从指定文件读取压缩存档时,gtar 会失败。

答案3

-z在两个著名的 tar 实现中不需要该选项:GNU tar 和 BSD tar(又名自由档案库)。检测所需的压缩算法很简单,只需检查输入文件的前几个字节即可完成。

您是否碰巧使用这些实现中的一种或另一种,很大程度上取决于您使用的操作系统:基于 Linux 的系统或 BSD 系统(包括 OSX)。

我在我的页面上总结了这些功能何时引入的详细信息tar 与可移植性

相关内容