让我们回到2000年4月14日那天,就在美国密尔沃基的一家旅馆里,人门发现了一具尸体,经尸检,死者的死因是酗酒过量导致的死亡。死者被发现时,手里还拿着空酒瓶,死亡的前一刻应该还在不断地饮酒。
对于一座城市来说,类似这样的事件并不稀奇。但是,这一次却引起了计算机界的极度关注,人们在世界各地自发地发起纪念活动,哀悼一个重要生命的离去。
他是谁呢?他的名字叫菲利普·卡兹(Philip Katz),他是 Zip 压缩算法的发明人,全世界几乎每一台电脑中都运行着他的压缩程序,压缩后的文件后缀常以“.zip”结尾。这些 zip 结尾的文件大都有一个共同的特点,那就是在文件内容的开头部分都标有“PK”的字样,这是作者名字的首字母缩写。
那一年,菲利普·卡兹年仅 37 岁。
和 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
假设有一个很大的压缩文件 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 文件后,发现里面有几个文件并不需要压缩进去,多余的文件占用了不少的空间。如果我们解压后再压缩的话,不仅耗费 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 学习完了,该命令其实不难,赶快去实践中练习吧!