6.6 用lzma压缩
与gzip
或bzip2
相比,lzma
是一个相对较新的压缩工具。它提供了比gzip
或bzip2
更好的压缩率。由于在大多数Linux发行版上都没有预装lzma
,你得使用软件包管理器自行安装。
6.6.1 实战演练
使用lzma
进行压缩:
- $ lzma filename
- $ ls
- filename.lzma
lzma
会删除原文件并生成名为filename.lzma的压缩文件。
解压缩lzma文件:
- $ unlzma filename.lzma
该命令会删除filename.lzma并生成该文件的未压缩形式。
lzma
命令可以从stdin
中读入文件,也可以将压缩文件写出到stdout
。
从stdin
读入并写出到stdout
:
- $ cat file | lzma -c > file.lzma
-c
用于将输出指定到stdout
。
我们通常将lzma
与归档文件结合使用。当进行归档及提取的时候,可以使用tar
命令的 -lzma
选项来压缩归档文件。
有两种方法可以创建lzma
归档文件。
- 方法 1
- $ tar -cvvf --lzma archive.tar.lzma [FILES]
或者
- $ tar -cavvf archive.tar.lzma [FILES]
选项-a
指定由文件扩展名自动判断压缩格式。
- 方法 2
首先创建一个归档文件:
- $ tar -cvvf archive.tar [FILES]
压缩归档文件:
- $ lzma archive.tar
如果我们要对成百上千个文件进行归档,上面的命令可能不太管用。要解决这个问题,需要使用-r
选项并借助一个循环来将文件逐个追加到归档文件中。请参考6.4节中类似的解决方法。
6.6.2 补充内容
来看看lzma
的其他选项。
- 提取
lzma
归档文件中的内容
要将使用lzma压缩过的归档文件中的内容提取到指定的目录,可以使用:
- $ tar -xvvf --lzma archive.tar.lzma -C extract_directory
其中,-x
用于提取内容,--lzma
指定使用lzma对归档文件进行解压缩。
我们也可以用:
- $ tar -xavvf archive.tar.lzma -C extract_directory
选项-a
指定由文件扩展名自动判断压缩格式。
- 保留输入文件
使用lzma
或unlzma
时,它们会删除输入文件并生成压缩过的输出文件。不过我们可以用选项-k
来避免删除输入文件。例如:
- $ lzma test.bz2 -k
- $ ls
- test.bz2.lzma
- 压缩率
我们可以指定压缩率,从1级到9级(其中,第1级压缩率最低,但是压缩速度最快;第9级压缩率最高,但是速度要慢得多)。
你可以按照下面的方法指定压缩率:
- $ lzma -9 test.img
该命令规定的是最大压缩率。
6.6.3 参考
6.2节讲解了tar
命令。