当我跑步时
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 会失败。