6.4 用gunzip或gzip压缩

gzip是GNU/Linux平台下常用的压缩格式。gzipgunzipzcat都可以处理gzip压缩文件类型。gzip只能够压缩单个文件,而无法对目录和多个文件进行归档,因此我们将这个任务交给tar,然后再用gzip进行压缩。如果指定多个文件作为输入,将会生成多个单独的压缩文件(.gz)。让我们来看看gzip的使用方法。

6.4.1 实战演练

要使用gzip压缩文件,可以使用下面的命令:

  1. $ gzip filename
  2. $ ls
  3. filename.gz

gzip会删除原文件并生成一个压缩文件filename.gz。

将gzip文件解压缩的方法如下:

  1. $ gunzip filename.gz

gunzip会删除filename.gz并生成filename.gz的未压缩形式。

要列出压缩文件的属性信息,可以使用:

  1. $ gzip -l test.txt.gz
  2. compressed uncompressed ratio uncompressed_name
  3. 35 6 -33.3% test.txt

gzip命令可以从stdin中读入文件,也可以将压缩文件写出到stdout

stdin读入并写出到stdout

  1. $ cat file | gzip -c > file.gz

选项 -c用来将输出指定到stdout

我们可以指定gzip的压缩级别。用 --fast--best选项分别提供最低或最高的压缩比。

6.4.2 补充内容

gzip命令通常与其他命令结合使用。它还有一些高级选项可以用来指定压缩比。让我们来看看gzip的这些特性。

  • 压缩归档文件

我们通常将gzip与归档文件结合使用。当进行归档及提取的时候,可以用tar命令的 -z选项来压缩归档文件。

你可以按照下面的方法创建经由gzip压缩过的归档文件:

  • 方法 1
  1. $ tar -czvvf archive.tar.gz [FILES]

或者

  1. $ tar -cavvf archive.tar.gz [FILES]

选项 -a指定从文件扩展名自动判断压缩格式。

  • 方法 2

首先,创建一个归档文件:

  1. $ tar -cvvf archive.tar [FILES]

压缩归档文件:

  1. $ gzip archive.tar

如果有多个文件(上千个)需要归档及压缩,我们可以采用方法2,只需在此基础上稍作变动。将多个文件作为命令行参数传递给tar的问题在于:tar只能从命令行中接受有限个文件。要解决这个问题,我们可以在一个循环中使用添加选项(-r)来逐个添加文件:

  1. FILE_LIST="file1 file2 file3 file4 file5"
  2. for f in $FILE_LIST;
  3. do
  4. tar -rvf archive.tar $f
  5. done
  6. gzip archive.tar

如果要提取经由gizp压缩的归档文件中的内容,可以使用:

  • -x用于提取内容;

  • -z表示采用gzip格式。

或者

  1. $ tar -xavvf archive.tar.gz -C extract_directory

在上面的命令中,选项 -a用于自动检测压缩格式。

  • zcat——无需解压缩,直接读取gzip格式文件

zcat命令无需解压缩,直接就可以从 .gz文件中提取内容,并打印到stdout。按照下面的方法,在保持 .gz文件不变的情况下,将从中提取出的文件打印出来:

  1. $ ls
  2. test.gz
  3.  
  4. $ zcat test.gz
  5. A test file
  6. # 文件test包含了一行文本"A test file"
  7.  
  8. $ ls
  9. test.gz
  • 压缩率

我们可以指定压缩率,压缩率有9级,其中:

  • 1级的压缩率最低,但是压缩速度最快;

  • 9级的压缩率最高,但是压缩速度最慢。

你可以按照下面的方法指定压缩比:

  1. $ gzip -9 test.img

它将按照最大的压缩比对文件进行压缩。

6.4.3 参考

6.2节讲解了tar命令。