前言
在Linux中,文件解压缩可谓是家常便饭,常见的解压缩有zip/unzip、rar、tar三大类,而tar中又有 gzip、bzip2、xz等多种压缩算法。
那么,上述解压缩方式所使用的命令是什么,以及哪种方式解压缩是最优的呢?请看本文分解。
zip/unzip
# 解压到特定目录:
$ unzip file.zip -d 你想要的目录
# 解压出现乱码(windows的zip在Linux下解压经常会有这个问题):
$ unzip -O gbk file.zip -d 你想要的目录
# 静默解压:
$ unzip -q file.zip -d 你想要的目录
# 压缩dir目录:
$ zip -r file.zip ./dir
# 静默压缩:
$ zip -rq file.zip ./dir
rar
1.安装
# Ubuntu
$ apt install rar
# Centos:需要编译安装
# Mac
$ brew install rar
2.解压缩
# 创建测试文件
$ mkdir -p /test/test1/test2
$ touch /test/test1/test2/a.txt
# 压缩(-r 表示连同子目录一起压缩)
$ rar a -r test.rar test/
...
Creating archive test.rar
Adding test/test1/test2/a.txt OK
Adding test/test1/test2 OK
Adding test/test1 0%
Done
# 解压一(会包含全部路径)
$ rar x test.rar test1/
Extracting from test.rar
Creating test1 OK
Creating test1/test OK
Creating test1/test/test1 OK
Creating test1/test/test1/test2 OK
Extracting test1/test/test1/test2/a.txt OK
# 解压二(不会包含全路径)
$ mkdir test2
$ rar e test.rar test2
Extracting from test.rar
Extracting test2/a.txt OK
tar
tar 本身并不具备压缩功能,它的作用只是归档,即将多份文件合为一个文件(可以理解为将多份文件放到一个文件夹)。
我们所看到的压缩文件,比如.tar.gz, .tar.bz2, .tar.xz 其实是先用tar命令进行,再使用其他压缩程序(gzip、bzip2、xz)压缩得到的。
仅打包
# 仅打包不压缩
$ tar -cvf filename.tar /folder
# 解压
$ tar -xvf filename.tar
采用gzip压缩
# 压缩:
$ tar -zcvf node_module.tar.gz node_modules/
# 静默压缩:
$ tar -zcf node_module.tar.gz node_modules/
# 解压(-C是指定解压路径):
$ tar -zxvf node_module.tar.gz -C /home/xxx
采用bzip2压缩
# 压缩:
$ tar -jcvf node_module.tar.bz2 node_modules/
# 静默压缩:
$ tar -jcf node_module.tar.bz2 node_modules/
# 解压:
$ tar -jxvf node_module.tar.bz2 -C /home/xxx
采用xz压缩
安装:
apt-get install xz-utils
解压缩:
# xz 压缩
tar -Jcvf node_module.tar.xz node_modules/
# 解压
tar -Jxvf node_module.tar.xz -C /home/xxx
采用7z压缩
安装:
apt-get install p7zip-full
解压缩:
# 压缩:
tar -cf - node_modules/ | 7z a -si node_module.7z
# 解压:
7z x -so node_module.7z | tar xf - -C /home/xxx
其中, 横杠(-)代表的是压缩后的文件, -si 表示从输入流读取数据(stdin), -so表示将数据写到输出流(stdout)
压缩对比
解压缩的方式说了那么多,到底哪种方式最优呢?还是说各有千秋呢?
以一个大小为319M的node_modules为例,并使用 time 命令计算时间(取real time),得到的结果如下:
| 压缩算法 | 压缩时间 | 解压时间 | 压缩体积 | 压缩率 |
|---|---|---|---|---|
| zip | 7.034s | 7.250s | 72M | 22.6 % |
| rar | 26.985s | 7.196s | 62M | 19.4 % |
| tar.gz | 5.779s | 2.207s | 57M | 17.9 % |
| tar.bz2 | 19.991s | 11.585s | 45M | 14.1 % |
| tar.xz | 1m43.104s | 4.360s | 33M | 10.3 % |
| tar + 7z | 53.941s | 3.740s | 32M | 10.0 % |
总结:根据上述测试,总结如下,tar.xz 和 tar + 7z 的压缩率最高,同时也比其他压缩算法耗时更长。如果要在压缩时间、解压时间、压缩率中取一个均值,则 tar+gzip 的方式较佳!!
写在最后
各位老板,创作不易,更需不断地磨练和总结,欢迎关注我,我是言淦,为你分享各种实用的编程知识与编程技巧,你们的点赞与关注是我前进和创作的最大动力!!