讓我們回到2000年4月14日那天,就在美國密爾沃基的一家旅館裡,人門發現了一具屍體,經屍檢,死者的死因是酗酒過量導致的死亡。死者被發現時,手裡還拿著空酒瓶,死亡的前一刻應該還在不斷地飲酒。
對於一座城市來說,類似這樣的事件並不稀奇。但是,這一次卻引起了計算機界的極度關注,人們在世界各地自發地發起紀念活動,哀悼一個重要生命的離去。
他是誰呢?他的名字叫菲利普·卡茲(Philip Katz),他是 Zip 壓縮演算法的發明人,全世界幾乎每一台電腦中都執行著他的壓縮程式,壓縮後的檔案字尾常以“.zip”結尾。這些 zip 結尾的檔案大都有一個共同的特點,那就是在檔案內容的開頭部分都標有“PK”的字樣,這是作者名字的首字母縮寫。
那一年,菲利普·卡茲年僅 37 歲。
初識 zip 命令
和 gzip/bzip2 類似,zip 命令用於檔案壓縮,unzip 命令則用於解壓縮。
我想把一個檔案和一個資料夾一起壓縮成一個壓縮檔案:
#我們將mynote.txt檔案和soft資料夾一起壓縮成zdata.zip檔案
[[email protected] 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選項來指定解壓縮的目標路徑
[[email protected] 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
選項的協助:
[[email protected] 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
選項就派上用場了。
[[email protected] 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檔案中清掉
[[email protected] ruanjian]$ zip zdata.zip -d mynote.txt
deleting: mynote.txt
#再看看, mynote.txt已經無影無蹤了
[[email protected] 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 學習完了,該命令其實不難,趕快去實踐中練習吧!