当你需要在通过网络传输文件之前减小文件大小或释放磁盘空间时,gzip 是 Linux 上的标准压缩工具。

gzip 使用 Deflate 算法,并将压缩文件保存为 .gz 扩展名。默认情况下,它会用压缩版本替换原始文件,并保持文件的时间戳、权限模式和所有权不变。

gzip 只能压缩单个文件。如果你想将多个文件或一个目录压缩成一个归档文件,需要先创建一个 Tar 归档,然后使用 gzip 压缩该 .tar 文件。以 .tar.gz 或 .tgz 结尾的文件是使用 gzip 压缩的 Tar 归档。

gzip 最适合用于文本文件、Tar 归档和类似的数据。避免将其用于图像、音频、PDF 和其他已经压缩过的二进制格式;大小缩减效果将微乎其微。

本指南通过实际示例介绍最常见的 gzip 选项。

gzip 命令语法

gzip 命令的一般语法如下:

txt
gzip [OPTION]... [FILE]...

gzip 只压缩常规文件,并为每个输入文件创建一个压缩文件。按照惯例,压缩文件以 .gz 或 .z 结尾。符号链接会被忽略。

使用 gzip 压缩文件

要压缩单个文件,请调用 gzip 命令并在其后跟上文件名:

gzip filename

gzip 将创建一个文件 filename.gz 并删除原始文件。

默认情况下,gzip 会在压缩文件中保留原始文件的时间戳、权限模式、所有权和名称。

保留原始文件

如果你想保留输入(原始)文件,请使用 -k 选项:

gzip -k filename

保留原始文件的另一种方法是使用 -c 选项,它告诉 gzip 写入标准输出,并将输出重定向到文件:

gzip -c filename > filename.gz

此方法在脚本中很有用,因为它永远不会删除原始文件。

详细输出

如果你想查看压缩百分比和正在处理的文件名,请使用 -v 选项:

gzip -v filename
filename:	  7.5% -- replaced with filename.gz

压缩多个文件

你也可以将多个文件作为参数传递给命令。例如,要压缩名为 file1、file2、file3 的文件,你可以运行以下命令:

gzip file1 file2 file3

上述命令将创建三个压缩文件:file1.gz、file2.gz、file3.gz。

压缩目录中的所有文件

要压缩给定目录中的所有文件,请使用 -r 选项:

gzip -r directory

gzip 将递归遍历整个目录结构,并压缩该目录及其子目录中的所有文件。

更改压缩级别

gzip 允许你指定从 1 到 9 的压缩级别范围。-1 或 --fast 表示最快的压缩速度和最小的压缩比,-9 或 --best 表示最慢的压缩速度和最大的压缩比。默认压缩级别为 -6。

例如,要获得最大压缩,你可以运行:

gzip -9 filename

压缩是一项 CPU 密集型任务;压缩级别越高,过程耗时越长。

使用标准输入

要从标准输入创建 .gz 文件,请将命令的输出通过管道传递给 gzip。例如,要创建一个 Gzip 压缩的 MySQL 数据库备份,你可以运行:

mysqldump database_name | gzip -c > database_name.sql.gz

mysqldump 命令的输出将作为 gzip 的输入。

使用 gzip 解压文件

要解压 .gz 文件,请使用 -d 选项:

gzip -d filename.gz

另一个可以用来解压 Gzip 文件的命令是 gunzip。它的工作方式与 gzip -d 相同:

gunzip filename.gz

你可能会发现 gunzip 比 gzip -d 更容易记住。

保留压缩文件

与压缩文件时一样,-k 选项告诉 gzip 保留输入文件,在这种情况下,即压缩文件:

gzip -dk filename.gz

解压多个文件

要一次解压多个文件,请将文件名作为参数传递给 gzip 命令:

gzip -d file1.gz file2.gz file3.gz

解压目录中的所有文件

当与 -d 和 -r 选项一起使用时,gzip 会递归解压给定目录中的所有文件:

gzip -dr directory

列出压缩文件信息

当与 -l 选项一起使用时,gzip 命令会显示给定压缩文件的统计信息:

gzip -l filename

输出将包括未压缩的文件名、压缩和未压缩大小以及压缩比:

         compressed        uncompressed  ratio uncompressed_name
                130                 107   7.5% filename

要获取更多信息,请添加 -v 选项:

gzip -lv filename
method  crc     date  time           compressed        uncompressed  ratio uncompressed_name
defla a9b9e776 Sep  3 21:20                 130                 107   7.5% filename

测试压缩文件

要在不提取的情况下验证 .gz 文件,请使用 -t 选项:

gzip -t filename.gz

查看压缩文件的内容

要在不解压的情况下查看 .gz 文件的内容,请使用 zcat:

zcat filename.gz

zcat 将解压后的输出写入标准输出,因此你可以将其通过管道传递给其他命令。例如,要在压缩的日志文件中搜索某个模式:

zcat access.log.gz | grep 'ERROR'

快速参考

如需可打印的快速参考,请参阅 gzip 速查表。

命令描述
gzip filename压缩文件(替换原始文件)
gzip -k filename压缩并保留原始文件
gzip -d filename.gz解压文件
gunzip filename.gz解压文件(gzip -d 的别名)
gzip -r directory递归压缩目录中的所有文件
gzip -9 filename最大压缩
gzip -1 filename最快压缩
gzip -l filename.gz显示压缩统计信息
gzip -t filename.gz测试压缩文件的完整性
zcat filename.gz在不提取的情况下查看压缩文件内容