.gz文件是单个文件的gzip压缩结果,须用gunzip或gzip -d解压,不可用tar;.tar.gz才是归档压缩包,应直接用tar -xf解压。

gz 文件不是“压缩包”,而是单个文件的压缩结果。很多人一看到 .gz 就下意识用 tar,结果报错:tar: This does not look like a tar archive —— 这是因为 tar 期望读取的是归档(archive),而 .gz 只是 gzip 压缩过的一个普通文件。
直接解压 .gz 文件,用 gunzip 或 gzip -d,不是 tar。
用 gunzip 解压单个 .gz 文件
gunzip 是最直白的选择,它专为 .gz 设计,行为明确:
- 默认解压后删除原
.gz文件 - 加
-k保留原文件:gunzip -k data.csv.gz - 不支持指定输出目录 —— 解压目标始终是当前目录,且文件名自动去掉
.gz后缀(如log.txt.gz→log.txt) - 不能解压目录,也不能处理多个文件夹层级;如果误传目录名,会报错:
gunzip: xxx is a directory -- ignored
用 gzip -d 替代 gunzip
gzip -d 和 gunzip 功能完全等价,是同一程序的两种调用方式:
-
gzip -d archive.gz等价于gunzip archive.gz - 同样不支持
-C(指定目录)选项;想把内容写到别处,得靠重定向或zcat - 若文件损坏,
gzip -t archive.gz可做完整性校验,gunzip没有对应快捷参数
想解压到指定路径?用 zcat + 重定向
当必须把解压结果放到其他目录(比如 /tmp/output.txt),又不想先解到当前目录再移动,就用 zcat:
zcat data.json.gz > /tmp/data.json-
zcat config.yml.gz | sudo tee /etc/config.yml > /dev/null(配合权限写入) - 注意:
zcat不会修改原.gz文件,也不产生临时文件,纯流式处理 - 如果目标路径父目录不存在,shell 会报错,需提前
mkdir -p /tmp/output
别把 .tar.gz 当成 .gz 处理
看到 .tar.gz 文件时,不要拆开用 gunzip 先解、再用 tar 解——虽然可行,但多此一举,且容易出错:
- 正确做法:直接
tar -xf archive.tar.gz(现代tar自动识别 gzip 流) - 错误链式操作:
gunzip archive.tar.gz && tar -xf archive.tar—— 如果原文件名含点(如v1.2.3.tar.gz),gunzip会生成v1.2.3.tar,但你可能误以为是v1.tar -
tar -zxf是旧写法,已不推荐;-z选项在新版本中冗余,tar足够智能
真正容易被忽略的点在于:.gz 和 .tar.gz 的本质差异不是“后缀长短”,而是数据结构不同——前者是压缩流,后者是归档+压缩。混用命令不会报语法错,但会卡在语义层面,比如 tar -xf file.gz 看似执行了,实际只是静默失败。


















