tar 命令的-z 参数有什么用?

2017-06-21 17:29:10 +08:00
 scriptB0y

晚上的解压命令一般都是 tar -zvxf xxx.tar.gz

我想问一下这里的 z 参数是干啥的,文档也没看懂。我自己尝试了一下,压缩的时候加 z 参数确实用 gzip 压缩了体积,问题是在解压的时候,我不加 z(tar -xf filename.tar.gz)也成功解压了……为什么网上搜到的命令都是-zvxf 解压呢?

另外我发现,tar -xf 好像可以解压.xz 文件,bz2 文件,好像解压的时候带参数是没有用的???

相关文档

-j, --bzip2
filter the archive through bzip2

-J, --xz
filter the archive through xz

-p, --preserve-permissions
extract information about file permissions (default for superuser)

-v, --verbose
verbosely list files processed

-z, --gzip
filter the archive through gzip
4983 次点击
所在节点    问与答
14 条回复
zent00
2017-06-21 17:31:16 +08:00
调用 gzip
herozzm
2017-06-21 17:32:44 +08:00
好像是指定解压引擎,不加的话由系统设定
scriptB0y
2017-06-21 17:35:36 +08:00
@herozzm 不知道系统设定是如何设定,如果指定错了肯定是解压不了的啊,如果是去一个一个尝试,那么岂不是我们不指定最好?(系统总会试出来一个对的)


@zent00 如果不写 z,一样是调用 gzip 吧
zent00
2017-06-21 17:36:30 +08:00
早期版本的 tar 无法自动判断文件所使用的压缩算法,所以需要指定 z 或 j,现代版本的 tar 都可以识别了,所以不需要指定 z j J,只需要告诉 tar 你是要解压 (x) 还是压缩 (c)
momocraft
2017-06-21 17:38:41 +08:00
和 tar 版本有关。旧版本解压时可能要指定压缩方式,现代常见的 gnu tar 和 bsdtar 聪明一点。
herozzm
2017-06-21 17:38:45 +08:00
@scriptB0y 是的我写脚本的时候解压文件都不加 z,因为里面有个类型的压缩文件,加了 z 参数反而会出错,不加都能顺利解压
herozzm
2017-06-21 17:39:10 +08:00
里面有各种类型的文件
cxbig
2017-06-21 17:42:37 +08:00
tar -c 本身只打包不压缩
-z 指定用 gzip 压缩方式
新版解压不需要指定-z,它会自动判断
scriptB0y
2017-06-21 17:42:50 +08:00
@zent00
@momocraft
@herozzm
看来用 linux 用的晚总会遇到一些摸不着头脑的东西……
introom
2017-06-21 17:45:03 +08:00
好问题,解压缩的时候会根据文件后缀自行判断压缩格式。
gstqc
2017-06-21 17:47:20 +08:00
压缩必须指定压缩格式
g: gzip
j: bz2
J: xz

解压以前需要指定压缩格式,现在新版本不需要,加不加 -a 参数都会自动判断格式

所以对于 gz 格式的解压,在新版 tar 上,以下命令全部等价
tar -zxf
tar zxf
tar -xf
tar xf
tar -axf
tar axf

不过,规范一点更好,写脚本的时候,统一使用 tar -zxf 或者 tar -axf 这些参数,免得出 bug
zent00
2017-06-21 17:54:01 +08:00
纠正我上一个回复里的一个误导性错误:打包的时候还是需要指定使用何种压缩算法的,tar 并不会根据扩展名来调用相应工具。tar 的自动识别仅适用于解包时。
zent00
2017-06-21 18:15:56 +08:00
@introom 并非按照文件后缀名进行判断,而是读取文件头信息,你可以尝试把某个 bz2 文件后缀修改成 gz,解压看看 tar 会不会认错文件类型。
scriptB0y
2017-06-21 20:14:08 +08:00
@zent00 我试过了,确实显示错误的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/370111

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX