.gz 文件怎么解压?
下载了个 .gz 结尾的文件,Windows 双击打不开,右键也没有"解压"选项。gz 是 gzip 压缩格式,Linux 世界的常客,Windows 需要额外工具。
一、先搞清楚它是单文件还是打包
这是最关键的一步。.gz 只压缩单个文件,如果是多个文件加目录,一般会先 tar 打包再 gzip,得到 .tar.gz 或 .tgz。
- xxx.gz:单文件压缩,解压直接得到 xxx
- xxx.tar.gz / xxx.tgz:两层结构,先解 gz 得到 tar,再解 tar 得到目录
很多人卡在 .tar.gz 上,解压一次得到一个 .tar,以为坏了,其实是没解第二层。
二、Windows 下怎么解
7-Zip(推荐)
装好后右键 .gz 文件 → 7-Zip → 提取到当前文件夹。对 .tar.gz 可以连续操作两次,7-Zip 新版也能一步解开。
WinRAR / Bandizip
都能识别 gz,操作类似。Bandizip 对中文文件名兼容性更好。
PowerShell
Windows 10 之后可以用内置命令,但要注意它其实是解 tar:
tar -xzf file.tar.gz
Windows 10 1803 起自带 bsdtar,这条命令直接可用。单独的 .gz 用:
tar -xzf file.gz
或者用 .NET 的方式,需要写几行脚本,不如装个 7-Zip 方便。
三、Linux / macOS
# 解单文件 gz,解压后删除原文件
gzip -d file.gz
gunzip file.gz
# 保留原文件(gzip 1.6+)
gzip -dk file.gz
# 解 tar.gz
tar -xzf file.tar.gz
# 解到指定目录
tar -xzf file.tar.gz -C /opt/app
# 只看内容不解压
tar -tzf file.tar.gz
# 压缩反过来
gzip file
tar -czf out.tar.gz dir/
macOS 自带 gzip 和 tar,命令完全一样。
四、常见问题
1. 解压后文件没有扩展名
gzip 只负责压缩,不记录原始文件名(严格来说头部有,但很多工具不读)。如果压缩前是 data.txt,压缩后叫 data.txt.gz,解压回来还是 data.txt。如果被改名成 a.gz,解压出来就叫 a,没有扩展名。用 file 命令看不到类型就手动判断内容。
2. 提示 "not in gzip format"
文件根本不是 gz 格式,可能下载不完整,或者服务器返回的是 HTML 错误页。用记事本打开看开头是不是 <!DOCTYPE,是的话重新下载。
3. 提示 "unexpected end of file"
文件被截断,下载不完整。对比一下文件大小和源站的 Content-Length,重新下。
4. 中文文件名乱码
tar 打包时如果没指定编码,Windows 解出来中文会乱。用 7-Zip 或者在 Linux 上设置 LANG=zh_CN.UTF-8 再解。实在不行用 Bandizip 的编码选择功能。
5. 解压后权限不对
tar 会保留权限位,但如果用 Windows 工具解压再传回 Linux,执行权限会丢。传回去之后 chmod +x 补上。
五、压缩率和速度
gzip 的压缩率一般,但速度很快。要更高压缩率用 xz(.tar.xz),代价是慢很多;要最快用 zstd(.zst),现在很多发行版的软件包都用它了。日常传文件 gzip 够用,备份大目录可以考虑 zstd。