首页 > Linux命令 阅读:6,222

zip命令_Linux zip命令:压缩和解压文件(.zip文件)

让我们回到2000年4月14日那天,就在美国密尔沃基的一家旅馆里,人门发现了一具尸体,经尸检,死者的死因是酗酒过量导致的死亡。死者被发现时,手里还拿着空酒瓶,死亡的前一刻应该还在不断地饮酒。

对于一座城市来说,类似这样的事件并不稀奇。但是,这一次却引起了计算机界的极度关注,人们在世界各地自发地发起纪念活动,哀悼一个重要生命的离去。

他是谁呢?他的名字叫菲利普·卡兹(Philip Katz),他是 Zip 压缩算法的发明人,全世界几乎每一台电脑中都运行着他的压缩程序,压缩后的文件后缀常以“.zip”结尾。这些 zip 结尾的文件大都有一个共同的特点,那就是在文件内容的开头部分都标有“PK”的字样,这是作者名字的首字母缩写。

那一年,菲利普·卡兹年仅 37 岁。

初识 zip 命令

和 gzip/bzip2 类似,zip 命令用于文件压缩,unzip 命令则用于解压缩。

我想把一个文件和一个文件夹一起压缩成一个压缩文件:
#我们将mynote.txt文件和soft文件夹一起压缩成zdata.zip文件
[roc@roclinux ruanjian]$ zip -r zdata.zip mynote.txt soft/
  adding: mynote.txt (deflated 91%)
  adding: soft/ (stored 0%)
  adding: soft/redis-2.6.16.tar.gz (deflated 0%)
  adding: soft/go1.1.2.Linux-amd64.tar.gz (deflated 1%)
  adding: soft/.abc (stored 0%)

从上面的用法可以看出,zip 支持对文件、文件夹进行压缩。-r选项表示递归参数中指定的文件夹。

zip 命令,与 gzip/bzip2 命令有一个明显的不同,那就是 zip 命令在压缩过程中,会保留原始文件,这一点要记住哦。

接下来的解压工作,同样简单易学,使用 unzip 就好了:
#解压zip文件到newdir文件夹中, 我们通过-d选项来指定解压缩的目标路径
[roc@roclinux ruanjian]$ unzip -d newdir/ zdata.zip
Archive:  zdata.zip
  inflating: newdir/mynote.txt
   creating: newdir/soft/
  inflating: newdir/soft/redis-2.6.16.tar.gz
  inflating: newdir/soft/go1.1.2.Linux-amd64.tar.gz
extracting: newdir/soft/.abc

再介绍下 -v 选项和 -t 选项

假设有一个很大的压缩文件 large.zip,我不想解压缩,只想看看它里面有什么,这时就需要-v选项的协助:
[roc@roclinux ruanjian]$ unzip -v zdata.zip
Archive:  zdata.zip
Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
      96  Defl:N        9  91% 02-20-2016 16:49 b51bd543  mynote.txt
       0  Stored        0   0% 02-18-2016 11:13 00000000  soft/
  999579  Defl:N   999279   0% 02-17-2016 22:52 64e7f8d5  soft/redis-2.6.16.tar.gz
41756805  Defl:N 41320991   1% 02-17-2016 22:52 fefe0b94  soft/go1.1.2.Linux-amd64.tar.gz
       0  Stored        0   0% 02-18-2016 11:13 00000000  soft/.abc
--------          -------  ---                            -------
42756480         42320279   1%                            5 files

我下载了一个压缩文件 large.zip,想验证一下这个压缩文件是否下载完全了,-t选项就派上用场了。
[roc@roclinux ruanjian]$ unzip -t zdata.zip
Archive:  zdata.zip
    testing: mynote.txt               OK
    testing: soft/                    OK
    testing: soft/redis-2.6.16.tar.gz   OK
    testing: soft/go1.1.2.Linux-amd64.tar.gz   OK
    testing: soft/.abc                OK
No errors detected in compressed data of zdata.zip.

竟然能在 zip 文件中删除文件

zip 其实很博大精深,很多你想象不到的功能,它都具备,很多地方体贴至极。下面我们举一个例子,来证明给你看。

有时候我们的工程师在辛辛苦苦压缩好 zip 文件后,发现里面有几个文件并不需要压缩进去,多余的文件占用了不少的空间。如果我们解压后再压缩的话,不仅耗费 CPU 资源和磁盘空间,而且还要有专人跟进等待和操作。

遇到这类问题该怎么办?zip 早就帮你想到啦。zip 提供了-d选项,即 --delete 选项,可以让我们在已经压缩好的 zip 文件中删除某个特定文件。
#还记得我们在压缩时囊括了的mynote.txt吧, 现在把它从zip文件中清掉
[roc@roclinux ruanjian]$ zip zdata.zip -d mynote.txt
deleting: mynote.txt
 
#再看看, mynote.txt已经无影无踪了
[roc@roclinux ruanjian]$ unzip -v zdata.zip
Archive:  zdata.zip
Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
       0  Stored        0   0% 02-18-2016 11:13 00000000  soft/
  999579  Defl:N   999279   0% 02-17-2016 22:52 64e7f8d5  soft/redis-2.6.16.tar.gz
41756805  Defl:N 41320991   1% 02-17-2016 22:52 fefe0b94  soft/go1.1.2.Linux-amd64.tar.gz
       0  Stored        0   0% 02-18-2016 11:13 00000000  soft/.abc
--------          -------  ---                            -------
42756384         42320270   1%                            4 files

这个用法有时候会事半功倍,比如在备份大规模数据或文件时,可以节省很多压缩和解压缩的时间。时间不是挤出来的,而是省出来的。

好啦,恭喜大家,zip 学习完了,该命令其实不难,赶快去实践中练习吧!