zip命令_Linux zip命令:壓縮和解壓檔案(.zip檔案)

2020-07-16 10:04:31
讓我們回到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 學習完了,該命令其實不難,趕快去實踐中練習吧!