6.6 用lzma压缩

gzipbzip2相比,lzma是一个相对较新的压缩工具。它提供了比gzipbzip2更好的压缩率。由于在大多数Linux发行版上都没有预装lzma,你得使用软件包管理器自行安装。

6.6.1 实战演练

使用lzma进行压缩:

  1. $ lzma filename
  2. $ ls
  3. filename.lzma

lzma会删除原文件并生成名为filename.lzma的压缩文件。

解压缩lzma文件:

  1. $ unlzma filename.lzma

该命令会删除filename.lzma并生成该文件的未压缩形式。

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

stdin读入并写出到stdout

  1. $ cat file | lzma -c > file.lzma

-c用于将输出指定到stdout

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

有两种方法可以创建lzma归档文件。

  • 方法 1
  1. $ tar -cvvf --lzma archive.tar.lzma [FILES]

或者

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

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

  • 方法 2

首先创建一个归档文件:

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

压缩归档文件:

  1. $ lzma archive.tar

如果我们要对成百上千个文件进行归档,上面的命令可能不太管用。要解决这个问题,需要使用-r选项并借助一个循环来将文件逐个追加到归档文件中。请参考6.4节中类似的解决方法。

6.6.2 补充内容

来看看lzma的其他选项。

  • 提取lzma归档文件中的内容

要将使用lzma压缩过的归档文件中的内容提取到指定的目录,可以使用:

  1. $ tar -xvvf --lzma archive.tar.lzma -C extract_directory

其中,-x用于提取内容,--lzma指定使用lzma对归档文件进行解压缩。

我们也可以用:

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

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

  • 保留输入文件

使用lzmaunlzma时,它们会删除输入文件并生成压缩过的输出文件。不过我们可以用选项-k来避免删除输入文件。例如:

  1. $ lzma test.bz2 -k
  2. $ ls
  3. test.bz2.lzma
  • 压缩率

我们可以指定压缩率,从1级到9级(其中,第1级压缩率最低,但是压缩速度最快;第9级压缩率最高,但是速度要慢得多)。

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

  1. $ lzma -9 test.img

该命令规定的是最大压缩率。

6.6.3 参考

6.2节讲解了tar命令。