命令行手册

Man » gzip 手册在线 - 详细的 gzip 手册页在线文档

🌍
gzip、gunzip、zcat - 压缩或解压缩文件

概要

gzip [ -acdfhklLnNrtvV19 ] [-S suffix] [ name ...  ]
gunzip [ -acfhklLnNrtvV ] [-S suffix] [ name ...  ]
zcat [ -fhLV ] [ name ...  ]

描述

gzip 命令使用 Lempel-Ziv 编码 (LZ77) 减小指定文件的大小。 尽可能地,每个文件都会被替换为带有 .gz 扩展名的文件,同时保留相同的权限、访问和修改时间。(默认扩展名对于 MSDOS、OS/2 FAT、Windows NT FAT 和 Atari 来说是 z)。 如果没有指定文件,或者文件名是“-”,则标准输入将被压缩到标准输出。 gzip 命令只会尝试压缩普通文件。 尤其是,它会忽略符号链接。

如果压缩文件的名称对于其文件系统来说太长,gzip 会对其进行截断。 gzip 命令仅尝试截断文件名中超过 3 个字符的部分。(部分由点分隔)。 如果文件名仅由较小的部分组成,则最长的部分将被截断。 例如,如果文件名的长度限制为 14 个字符,gzip.msdos.exe 将被压缩为 gzi.msd.exe.gz。 在没有文件名称长度限制的系统上,文件名不会被截断。

默认情况下,gzip 会将原始文件名和时间戳保存在压缩文件中。 在使用 -N 选项解压缩文件时,这些将被使用。 当压缩文件的名称不适合其文件系统时,或者在文件传输后未保留时间戳时,这非常有用。

可以使用 gzip -d 或 gunzip 或 zcat 将压缩文件恢复到其原始形式。 如果在压缩文件中保存的原始名称不适合其文件系统,则会构造一个新的名称,使其有效。

gunzip 接受命令行中的文件列表,并替换每个名称以 .gz、-gz、.z、-z 或 _z(忽略大小写)结尾,并且以正确的魔数开头的文件的解压缩版本,从而删除原始扩展名。 gunzip 还将 .tgz 和 .taz 作为 .tar.gz 和 .tar.Z 的简写。 压缩时,如果需要,gzip 会使用 .tgz 扩展名,而不是截断带有 .tar 扩展名的文件。

gunzip 目前可以解压缩由 gzip、zip、compress、compress -H 或 pack 创建的文件。 自动检测输入格式。 在使用前两种格式时,gunzip 会检查 32 位 CRC。 对于 pack,gunzip 会检查未压缩的长度。 标准 compress 格式并非设计用于允许一致性检查。 但是,gunzip 有时可以检测到错误的 .Z 文件。 如果在解压缩 .Z 文件时遇到错误,请不要假设 .Z 文件是正确的,只是因为标准的 uncompress 命令没有抱怨。 这通常意味着标准 uncompress 不会检查其输入,并会生成垃圾输出。 SCO compress -H 格式(lzh 压缩方法)不包含 CRC,但允许进行一些一致性检查。


由 zip 创建的文件,如果它们只有一个成员且使用“deflation”方法进行压缩,则可以使用 gzip 解压缩。此功能旨在帮助将 tar.zip 文件转换为 tar.gz 格式。要提取包含单个成员的 zip 文件,请使用类似于“gunzip \<foo.zip”或“gunzip -S .zip foo.zip”的命令。要提取包含多个成员的 zip 文件,请使用 unzip 而不是 gunzip。

zcat 命令与 gunzip -c 相同。(在某些系统上,zcat 可能安装为 gzcat,以保留到 compress 的原始链接。)zcat 解压缩命令行上的文件列表或其标准输入,并将解压缩的数据写入标准输出。zcat 将解压缩具有正确魔术数字的文件,无论它们是否具有 .gz 后缀。

gzip 命令使用 zip 和 PKZIP 中使用的 Lempel-Ziv 算法。获得的压缩量取决于输入的大小以及常见子字符串的分布。通常,文本(如源代码或英语)减少了 60-70%。压缩通常比 LZW(如 compress 中使用)、霍夫曼编码(如 pack 中使用)或自适应霍夫曼编码(compact)所实现的压缩效果更好。

始终执行压缩,即使压缩后的文件略大于原始文件。最坏的情况是,对于 gzip 文件头,扩展几个字节,以及每个 32 KB 块增加 5 个字节,或者对于大型文件,扩展率为 0.015%。实际使用的磁盘块数量几乎不会增加。

gzip 通常在压缩或解压缩文件时保留文件的模式和修改时间戳。如果您具有适当的权限,它还会保留文件的所有者和组。

选项

-a --ascii
ASCII 文本模式:使用本地约定转换行尾。此选项仅在某些非 Unix 系统上受支持。对于 MSDOS,压缩时将 CR LF 转换为 LF,解压缩时将 LF 转换为 CR LF。

-c --stdout --to-stdout
将输出写入标准输出;保留原始文件不变。如果有多个输入文件,则输出由一系列独立压缩的成员组成。要获得更好的压缩效果,请在压缩之前连接所有输入文件。

-d --decompress --uncompress
解压缩。

-f --force
强制进行压缩或解压缩,即使文件具有多个链接或相应的 文件已存在,或者压缩数据是从终端读取或写入。
如果输入数据不是 gzip 识别的格式,并且同时指定了 --stdout 选项,则将输入数据不加更改地复制到标准输出:让 zcat 像 cat 一样工作。 如果未提供 -f,并且未在后台运行,gzip 会提示确认是否覆盖现有文件。

-h --help

显示帮助屏幕并退出。

-k --keep

在压缩或解压缩期间保留(不删除)输入文件。

-l --list

对于每个压缩文件,列出以下字段:

压缩大小:压缩文件的大小
未压缩大小:未压缩文件的大小
比例:压缩比例(如果未知则为 0.0%)
未压缩名称:未压缩文件的名称

未压缩大小对于非 gzip 格式的文件(例如压缩的 .Z 文件)为 -1。要获取此类文件,可以使用:

zcat file.Z | wc -c

与 --verbose 选项结合使用时,还会显示以下字段:

方法:压缩方法
crc:未压缩数据的 32 位 CRC
日期和时间:未压缩文件的时间戳

当前支持的压缩方法有 deflate、compress、lzh(SCO compress -H)和 pack。对于非 gzip 格式的文件,crc 显示为 ffffffff。

使用 --name,未压缩的名称、日期和时间将是压缩文件中存储的,如果存在的话。

使用 --verbose,还会显示所有文件的总大小和压缩比,除非某些大小未知。使用 --quiet,则不显示标题和总计行。

-L --license

显示 gzip 许可证并退出。

-n --no-name

在压缩时,默认情况下不要保存原始文件名和时间戳。(如果文件名已被截断,则始终保存原始名称。)在解压缩时,不要恢复已保存的文件名(如果存在)(仅删除压缩文件的 gzip 后缀),并且不要恢复原始时间戳(如果存在)(从压缩文件复制)。此选项在解压缩时为默认选项。

-N --name

在压缩时,始终保存原始文件名,如果原始文件是常规文件并且其时间戳至少为 1(1970-01-01 00:00:01 UTC),并且小于 2**32(2106-02-07 06:28:16 UTC,假设不计算闰秒),则保存原始修改时间戳的秒数;这是默认设置。在解压缩时,如果存在,则从已保存的文件名和时间戳中恢复。此选项对于文件名长度受限制的系统或在文件传输后时间戳丢失时非常有用。

-q --quiet

抑制所有警告。

-r --recursive

递归地遍历目录结构。如果命令行中指定的文件名中有任何是目录,gzip 将进入该目录并压缩所有找到的文件(或在 gunzip 的情况下解压缩它们)。


-S .suf --suffix .suf

在压缩时,使用后缀 .suf 代替 .gz。可以指定任何非空后缀,但应避免使用 .z 和 .gz 以外的后缀,以避免在将文件传输到其他系统时产生混淆。

在解压缩时,将 .suf 添加到要尝试的后缀列表的开头,以从输入文件名派生输出文件名。

--synchronous

使用同步输出。使用此选项,gzip 在系统崩溃期间不太可能丢失数据,但可能会慢得多。

-t --test

测试。检查压缩文件的完整性,然后退出。

-v --verbose

详细。显示每个压缩或解压缩文件的名称和百分比缩减。

-V --version

版本。显示版本号和编译选项,然后退出。

-# --fast --best

使用指定的数字 # 来调节压缩速度,其中 -1 或 --fast 表示最快的压缩方法(压缩率较低),-9 或 --best 表示最慢的压缩方法(压缩率最高)。默认压缩级别为 -6(即,偏向于以牺牲速度为代价来实现高压缩率)。

--rsyncable

当您在两台计算机之间同步压缩文件时,此选项允许 rsync 仅传输已更改的存档文件,而不是整个存档。通常,在存档中的任何文件发生更改后,压缩算法会生成与存档的先前版本不匹配的新存档版本。在这种情况下,rsync 会将新的存档完整版本传输到远程计算机。使用此选项,rsync 可以仅传输已更改的文件以及更新存档结构所需的少量元数据。

高级用法

多个压缩文件可以连接在一起。在这种情况下,gunzip 将一次提取所有成员。例如:

gzip -c file1  > foo.gz
gzip -c file2 >> foo.gz

然后

gunzip -c foo

等同于

cat file1 file2

如果 .gz 文件的一个成员损坏,仍然可以恢复其他成员(如果删除了损坏的成员)。但是,通过一次压缩所有成员,您可以获得更好的压缩效果:

cat file1 file2 | gzip > foo.gz

比

gzip -c file1 file2 > foo.gz

压缩效果更好。

如果您想重新压缩连接的文件以获得更好的压缩效果,请执行以下操作:

gzip -cd old.gz | gzip > new.gz

如果压缩文件由多个成员组成,则 --list 选项报告的未压缩大小和 CRC 仅适用于最后一个成员。如果您需要所有成员的未压缩大小,可以使用:

gzip -cd file.gz | wc -c

如果您希望创建一个包含多个成员的单个存档文件,以便以后可以独立提取成员,请使用存档程序,如 tar 或 zip。GNU tar 支持 -z 选项以透明地调用 gzip。gzip 旨在作为 tar 的补充,而不是替代品。


环境

过时的环境变量 GZIP 可以包含 gzip 的一组默认选项。这些选项首先会被解释,并且可以通过显式的命令行参数进行覆盖。由于这可能会在使用脚本时引起问题,因此此功能仅支持不太可能造成太大危害的选项,并且 gzip 会在使用了该功能时发出警告。此功能将在 gzip 的未来版本中删除。

您可以使用别名或脚本。例如,如果 gzip 位于目录 /usr/bin 中,您可以将 $HOME/bin 附加到 PATH 中,并创建一个可执行脚本 $HOME/bin/gzip,内容如下:

#! /bin/sh
export PATH=/usr/bin
exec gzip -9 "$@"

参见

znew(1), zcmp(1), zmore(1), zforce(1), gzexe(1), zip(1), unzip(1), compress(1)

gzip 文件格式在 P. Deutsch 的 GZIP 文件格式规范版本 4.3 中有说明,网址为 [https://www.ietf.org/rfc/rfc1952.txt],互联网 RFC 1952(1996 年 5 月)。zip 压缩格式在 P. Deutsch 的 DEFLATE 压缩数据格式规范版本 1.3 中有说明,网址为 [https://www.ietf.org/rfc/rfc1951.txt],互联网 RFC 1951(1996 年 5 月)。

诊断

退出状态通常为 0;如果发生错误,退出状态为 1。如果发生警告,退出状态为 2。

用法:gzip [-cdfhklLnNrtvV19] [-S 后缀] [文件 ...]

命令行中指定了无效的选项。

文件:不是 gzip 格式

指定的文件未被压缩。

文件:损坏的输入。

使用 zcat 恢复部分数据。压缩的文件已损坏。可以使用以下命令恢复到故障点的数据:

zcat 文件 > 恢复

文件:使用 xx 位压缩,只能处理 yy 位

文件(使用 LZW)由可以处理更多位的程序压缩,而此计算机上的解压缩代码无法处理。使用 gzip 重新压缩文件,gzip 压缩效果更好且使用的内存更少。

文件:已经有 .gz 后缀 -- 未更改

假设该文件已经压缩。重命名文件并重试。

文件已存在;您是否要覆盖(y 或 n)?

如果希望替换输出文件,请回复“y”;如果不想替换,请回复“n”。

gunzip:损坏的输入

检测到 SIGSEGV 违规,通常表示输入文件已损坏。

xx.x% 压缩后节省的输入百分比。

(仅对 -v 和 -l 有关。)

-- 不是常规文件或目录:已忽略

当输入文件不是常规文件或目录时(例如,符号链接、套接字、FIFO、设备文件),它将保持不变。

-- 有 xx 个其他链接:未更改

输入文件具有链接;它保持不变。有关更多信息,请参阅 ln(1)。使用 -f 标志强制压缩多重链接的文件。

注意事项

在将压缩数据写入磁带时,通常需要用零填充输出,直到达到块边界。当读取数据并将整个块传递给 gunzip 进行解压缩时,gunzip 会检测到压缩数据后有额外的尾部垃圾,并且默认情况下会发出警告。您可以使用 --quiet 选项来抑制警告。


错误

在某些罕见情况下,--best 选项提供的压缩效果不如默认压缩级别 (-6)。对于某些高度冗余的文件,compress 的压缩效果优于 gzip。

报告错误

请将错误报告发送至:_ GNU gzip 官方网站:[https://www.gnu.org/software/gzip/] 关于使用 GNU 软件的通用帮助:[https://www.gnu.org/gethelp/]

版权声明

版权所有 © 1998–1999、2001–2002、2012、2015–2023 自由软件基金会。 版权所有 © 1992、1993 Jean-loup Gailly

允许复制并分发本手册的逐字副本,前提是所有副本上都保留版权声明和本许可声明。

允许复制和分发本手册的修改版本,条件是遵循逐字复制的条件,并且整个生成的派生作品都应以与本声明相同的许可声明进行分发。

允许将本手册翻译成另一种语言,并遵循上述修改版本的条件,但本许可声明可以用基金会批准的翻译版本进行声明。