6.4 用gunzip或gzip压缩
gzip
是GNU/Linux平台下常用的压缩格式。gzip
、gunzip
、zcat
都可以处理gzip压缩文件类型。gzip
只能够压缩单个文件,而无法对目录和多个文件进行归档,因此我们将这个任务交给tar
,然后再用gzip
进行压缩。如果指定多个文件作为输入,将会生成多个单独的压缩文件(.gz)。让我们来看看gzip
的使用方法。
6.4.1 实战演练
要使用gzip
压缩文件,可以使用下面的命令:
- $ gzip filename
- $ ls
- filename.gz
gzip
会删除原文件并生成一个压缩文件filename.gz。
将gzip文件解压缩的方法如下:
- $ gunzip filename.gz
gunzip
会删除filename.gz并生成filename.gz的未压缩形式。
要列出压缩文件的属性信息,可以使用:
- $ gzip -l test.txt.gz
- compressed uncompressed ratio uncompressed_name
- 35 6 -33.3% test.txt
gzip
命令可以从stdin
中读入文件,也可以将压缩文件写出到stdout
。
从stdin
读入并写出到stdout
:
- $ cat file | gzip -c > file.gz
选项 -c
用来将输出指定到stdout
。
我们可以指定gzip
的压缩级别。用 --fast
或 --best
选项分别提供最低或最高的压缩比。
6.4.2 补充内容
gzip
命令通常与其他命令结合使用。它还有一些高级选项可以用来指定压缩比。让我们来看看gzip的这些特性。
- 压缩归档文件
我们通常将gzip
与归档文件结合使用。当进行归档及提取的时候,可以用tar
命令的 -z
选项来压缩归档文件。
你可以按照下面的方法创建经由gzip
压缩过的归档文件:
- 方法 1
- $ tar -czvvf archive.tar.gz [FILES]
或者
- $ tar -cavvf archive.tar.gz [FILES]
选项 -a
指定从文件扩展名自动判断压缩格式。
- 方法 2
首先,创建一个归档文件:
- $ tar -cvvf archive.tar [FILES]
压缩归档文件:
- $ gzip archive.tar
如果有多个文件(上千个)需要归档及压缩,我们可以采用方法2,只需在此基础上稍作变动。将多个文件作为命令行参数传递给tar
的问题在于:tar
只能从命令行中接受有限个文件。要解决这个问题,我们可以在一个循环中使用添加选项(-r
)来逐个添加文件:
FILE_LIST="file1 file2 file3 file4 file5"
for f in $FILE_LIST;
do
tar -rvf archive.tar $f
done
gzip archive.tar
如果要提取经由gizp压缩的归档文件中的内容,可以使用:
-x
用于提取内容;-z
表示采用gzip格式。
或者
- $ tar -xavvf archive.tar.gz -C extract_directory
在上面的命令中,选项 -a
用于自动检测压缩格式。
zcat
——无需解压缩,直接读取gzip格式文件
zcat
命令无需解压缩,直接就可以从 .gz
文件中提取内容,并打印到stdout
。按照下面的方法,在保持 .gz
文件不变的情况下,将从中提取出的文件打印出来:
- $ ls
- test.gz
- $ zcat test.gz
- A test file
- # 文件test包含了一行文本"A test file"
- $ ls
- test.gz
- 压缩率
我们可以指定压缩率,压缩率有9级,其中:
1级的压缩率最低,但是压缩速度最快;
9级的压缩率最高,但是压缩速度最慢。
你可以按照下面的方法指定压缩比:
- $ gzip -9 test.img
它将按照最大的压缩比对文件进行压缩。
6.4.3 参考
6.2节讲解了tar
命令。