No.8 Linux文件解压缩

438 阅读2分钟

前言

在Linux中,文件解压缩可谓是家常便饭,常见的解压缩有zip/unziprartar三大类,而tar中又有 gzipbzip2xz等多种压缩算法。

那么,上述解压缩方式所使用的命令是什么,以及哪种方式解压缩是最优的呢?请看本文分解。

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),得到的结果如下:

压缩算法压缩时间解压时间压缩体积压缩率
zip7.034s7.250s72M22.6 %
rar26.985s7.196s62M19.4 %
tar.gz5.779s2.207s57M17.9 %
tar.bz219.991s11.585s45M14.1 %
tar.xz1m43.104s4.360s33M10.3 %
tar + 7z53.941s3.740s32M10.0 %

总结:根据上述测试,总结如下,tar.xztar + 7z 的压缩率最高,同时也比其他压缩算法耗时更长。如果要在压缩时间、解压时间、压缩率中取一个均值,则 tar+gzip 的方式较佳!!

写在最后

各位老板,创作不易,更需不断地磨练和总结,欢迎关注我,我是言淦,为你分享各种实用的编程知识与编程技巧,你们的点赞与关注是我前进和创作的最大动力!!

参考

每天学习一个命令:tar 压缩和解压文件
linux 压缩工具 7z的使用小技巧