Linux基礎命令---unzip

一生有你llx發表於2018-12-26

unzip

解壓zip指令壓縮過的檔案。unzip將列出、測試或從ZIP存檔中提取檔案,這些檔案通常在MS-DOS系統中找到。預設行為(沒有選項)是將指定ZIP存檔中的所有檔案提取到當前目錄(及其下面的子目錄)中。一個配套程式zip(1L)建立ZIP檔案;這兩個程式都與PKWare的PKZIP和PKUNZIP為MS-DOS建立的檔案相容,但在許多情況下,程式選項或預設行為有所不同。

此命令的適用範圍:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

 

1 、語法

unzip  [-Z]  [-cflptTuvz[abjnoqsCDKLMUVWX$/:^]]  file[.zip] [file(s) ...]  [-x xfile(s) ...]  [-d exdir]

 

2 、選項引數列表

引數

說明

file[.zip]

ZIP 存檔的路徑。如果檔案規範是萬用字元,則按作業系統(或檔案系統)確定的順序處理每個匹配的檔案。只有檔名可以是萬用字元;路徑本身不能。萬用字元表示式類似於常用Unix shell(sh、ksh、csh)中支援的表示式,可能包含:

* ,匹配0或多個字元的序列。

?,匹配一個字元。

[…] ,匹配括號內的任何單個字元;範圍由開始字元、連字元和結束字元指定。如果是感嘆號或插入符號(‘!‘或者‘^’)在左括號後面,則括號中的字元範圍被補充(也就是說,除了括號中的字元外,任何字元都被認為是匹配的)。若要指定逐字左括號,必須使用三個字元序列‘‘[[]’’。

( 確保引用任何可能被作業系統解釋或修改的字元,特別是在Unix和VMS下。)如果沒有找到匹配項,則假定規範為文字檔名;如果也失敗,則追加字尾.zip。請注意,與任何其他ZIP存檔一樣,支援自解壓ZIP檔案;只需顯式地指定.exe字尾(如果有的話)。

[file(s)]

要處理的歸檔成員的可選列表,用空格分隔。(用VMSCLI定義的VMS版本必須用逗號分隔檔案。見下文備選案文中的-v)。正規表示式(萬用字元)可用於匹配多個成員;參見上文。同樣,請務必引用否則將由作業系統展開或修改的表示式

[-x xfile(s)]

要排除在處理之外的歸檔成員的可選列表。由於萬用字元通常匹配(‘/’)目錄分隔符(異常請參見選項-W),此選項可用於排除子目錄中的任何檔案。例如,“unzip  foo  *.[Ch]  -x  */*”將提取主目錄中的所有C原始檔,但在任何子目錄中都不提取。如果沒有-x選項,則將提取zip檔案中所有目錄中的所有C原始檔。

[-d exdir]

提取檔案的可選目錄。預設情況下,所有檔案和子目錄都在當前目錄中重新建立;-d選項允許在任意目錄中提取(總是假定一個目錄具有寫入該目錄的許可權)。這個選項不需要出現在命令列的末尾;它也可以在zipfile規範之前(帶常規選項)、在zip檔案規範之後,或者在檔案和-x選項之間被接受。選項和目錄可以連線在一起,沒有任何空白,但請注意,這可能會導致正常的shell行為被抑制。特別是,‘-d~’被Unix C shell擴充套件為使用者主目錄的名稱,但是‘-d~’被視為當前目錄的一個文字子目錄‘~’。

請注意,為了支援過時的硬體,Unzip的使用螢幕僅限於22或23行,因此只應被視為基本解壓縮語法的提醒,而不是所有可能的標誌的詳盡列表。詳盡的清單如下:

選項

說明

--help

幫助資訊

--version

顯示命令版本資訊

-c

將解壓結果送到標準輸出

-f

解壓時更新現有的檔案,即僅解壓磁碟上已經存在且比磁碟副本更新的檔案。預設情況下,在覆蓋之前解壓縮查詢,但是-o選項可以用於抑制查詢

-l

顯示壓縮包內檔案的詳細資訊。將列印指定檔案的名稱、未壓縮檔案大小、修改日期和時間,以及所有指定檔案的總計。

-p

將解壓結果送到標準輸出,不對字元轉換。只有檔案資料被髮送到stdout,檔案總是以二進位制格式提取

-t

檢查壓縮檔案的正確性。該選項提取記憶體中的每個指定檔案,並將擴充套件檔案的CRC(迴圈冗餘校驗,增強校驗和)與原始檔案的儲存CRC值進行比較。

-T

將存檔上的時間戳設定為每個歸檔中最新檔案的時間戳。這對應於zip的-go選項,但它可以用於萬用字元zip檔案(例如,“unzip –T \*.zip”),而且速度要快得多

-u

更新現有檔案,並在需要時建立新檔案。該選項執行與-f選項相同的功能

-v

列出存檔檔案(詳細格式)或顯示診斷版本資訊。

-z

僅顯示壓縮檔案的備註資訊

 

修飾符

說明

--help

幫助資訊

--version

顯示命令版本資訊

-a

解壓時,對文字檔案做字元轉換

-b

不對文字檔案字元轉換,把所有檔案當做二進位制檔案。

-B

儲存每個覆蓋檔案的備份副本,‘foo’的舊拷貝改名為‘foo~’。

-C

解壓時,設定檔名大小寫敏感

-D

跳過提取項的時間戳恢復。

-E

[ 僅限MacOS]在恢復操作期間顯示MacOS額外欄位的內容。

-F

[ 僅限Acorn]禁止從儲存的檔名中刪除NFS檔案型別擴充套件。

-i

[ 僅限MacOS]忽略儲存在MacOS額外欄位中的檔名。相反,使用儲存在條目標題的泛型部分中的最相容的檔名。

-j

垃圾路。存檔的目錄結構不被重新建立;所有檔案都存放在提取目錄中(預設情況下是當前的)。

-J

[ 僅限BeOS]垃圾檔案屬性。檔案的BeOS檔案屬性沒有恢復,只是檔案的資料。

-K

保留SUID/SGID/duy檔案屬性。如果沒有此標誌,則出於安全原因,將清除這些屬性位。

-L

解壓時,將檔名改為小寫字母

-M

把解壓結果送給more分屏顯示

-n

解壓時,不覆蓋原有的檔案

-N

將檔案註釋解壓縮為Amiga檔案。

-o

不提示使用者,覆蓋原有檔案

-P

解壓時,輸入密碼

-q

靜默模式

-s

[OS/2,  NT,  MS-DOS] 將檔名中的空格轉換為下劃線

-S

[VMS] 將文字檔案(-a,-aa)轉換為Stream_LF記錄格式,而不是文字檔案預設的可變長度記錄格式。

-U

[UNICODE_SUPPORT only] 修改或禁用UTF-8處理。當Unicode_Support可用時,選項-U強制解壓將UTF-8編碼檔名中的所有非ASCII字元轉義為“#Uxxxx”

-V

保留(VMS)檔案版本號。VMS檔案可以用版本號儲存,格式為file.ext;#。預設情況下,‘;#’版本號將被刪除,但此選項允許保留它們。

-W

[ 僅當WILD_STOP_AT_DIRR編譯時選項啟用]   修改模式匹配例程,以便 “?”和“*”與目錄分隔符“/”不匹配。

-X

[VMS,  Unix,  OS/2,  NT, Tandem]   在Unix下恢復使用者和組資訊(UID/GID)

-Y

[VMS]  將存檔的檔名結尾“.nn”(其中‘nnn’是一個十進位制數)視為VMS版本號(‘;nnn’)。(預設的做法是將它們視為檔案型別。)

-$

[MS-DOS, OS/2, NT] 如果提取介質是可移動的(例如磁碟),則恢復卷標籤。加倍的選項($-$)允許固定媒體(硬碟)也被標記。預設情況下,卷標籤將被忽略。

-/ extensions

[Acorn]   重寫Unzip$Ext環境變數提供的擴充套件列表。在提取過程中,與此擴充套件列表中的項匹配的檔名副檔名將在提取檔案的基名前面交換。

-:

允許將存檔成員解壓縮到當前“提取根資料夾”之外的位置。

-^

[Unix only]   允許提取的ZIP存檔條目的名稱中包含控制字元。

-2

[vms] 強制無條件地將檔名轉換為ODS 2-相容名稱

 

3 、環境選項

unzip 的預設行為可以通過放置在環境變數中的選項來修改。這可以用任何選項來完成,但是它可能對-a,-L,-C,-q,-o或-n修飾符最有用:預設情況下使unzip自動轉換文字檔案,使檔名從大寫系統轉換為小寫,使其不敏感地匹配名稱,使其更安靜,或者讓它在解壓檔案時始終覆蓋或不覆蓋它們。例如,要使解壓縮儘可能安靜,只報告錯誤,可以使用以下命令之一:

Unix Bourne shell:      UNZIP=-qq; export UNZIP

Unix C shell:setenv      UNZIP -qq

OS/2 or MS-DOS:set       UNZIP=-qq

VMS (quotes for lowercase):      define UNZIP_OPTS "-qq"

實際上,環境選項被認為與任何其他命令列選項一樣,只是它們實際上是命令列中的第一個選項。要覆蓋環境選項,可以使用“減號運算子”來刪除它。例如,若要覆蓋上面示例中的一個靜音標誌,請使用以下命令

unzip --q[other options] zipfile

第一個連字元是正常的開關字元,第二個是負號,作用於Q選項。因此,這裡的效果是取消一個安靜的量子。若要取消這兩個安靜的標誌,可以使用兩個(或更多)最小值:

unzip -t--q zipfile

unzip ---qt zipfile               這兩個是等價的

正如上面的例子所建議的,預設變數名是UNZIP_OPTS,用於VMS,以及所有其他作業系統的解壓縮。為了與zip(1L)相容,UNZIP_OPTS也被接受(不要問)。但是,如果同時定義了UNZIP和UNZIP_OPTS,那麼UNZIP優先。Unzip的診斷選項(沒有zip檔名的-v)可以用於檢查所有四個可能的解壓縮和zipinfo環境變數的值

 

4 、說明

unzip 的某些編譯版本可能不支援解密。若要檢查加密支援版本,可以嘗試測試或提取加密存檔,或者檢查unzip的診斷螢幕(請參閱上面的-v選項)以“[解密]”作為特殊的編譯選項之一。

如上所述,可以使用-P選項在命令列上提供密碼,但代價是安全性。首選的解密方法是正常提取;如果zip檔案成員被加密,解壓縮將提示輸入密碼,而不回顯所鍵入的內容。解壓縮繼續使用相同的密碼,只要它看起來是有效的,通過在每個檔案上測試一個12位元組的頭。正確的密碼將始終簽出與標題,但有1/256的機會,一個不正確的密碼也會。(這是PKWare zipfile格式的一個安全特性;它有助於防止暴力攻擊,否則只通過測試報頭就可以獲得很大的速度優勢。)如果給出了錯誤的密碼,但它還是通過了頭測試,則將為提取的資料生成不正確的CRC,或者在提取過程中解壓縮失敗,因為‘解密’位元組並不構成有效的壓縮資料流。

如果第一個密碼沒有通過頭檢查某個檔案,解壓縮將提示輸入另一個密碼,以此類推,直到提取所有檔案。如果不知道密碼,則輸入空密碼(即只返回一個回車或‘Enter’)作為跳過所有進一步提示的訊號。隨後將只提取存檔中未加密的檔案。(事實上,這並不完全正確;早期版本的zip(1L)和zipcloak(1L)允許空密碼,因此解壓縮檢查每個加密檔案以檢視空密碼是否有效。這可能會導致“假陽性”和提取錯誤,如上所述。)

用8位密碼加密的檔案(例如,帶有重音的歐洲字元的密碼)可能無法跨系統和/或其他存檔器移植。這個問題源於對這些字元使用多種編碼方法,包括拉丁文1(ISO 8859-1)和OEM內碼表850。DoS PKZIP 2.04g使用OEM內碼表;Windows PKZIP 2.50使用拉丁文-1(因此與DOS PKZIP不相容);Info-ZIP使用DOS、OS/2和Win3.x埠上的OEM內碼表,但使用ISO編碼(拉丁文-1等)。在其他地方,NicoMak的WinZip6.x根本不允許8位密碼。解壓縮5.3(或更新)嘗試首先使用預設字符集(例如拉丁語-1),然後使用備用字符集(例如OEM內碼表)測試密碼。

 

5 、例子程式碼

unzip  letters

letters.zip 解壓到當前的目錄以及其子目錄下

unzip  -j  letters

letters.zip 解壓到當前目錄下

unzip  -tq  letters

測試 letters.zip ,列印出測試資訊,確定壓縮包是否完整

unzip  -tq  \*.zip

測試當前目錄下的所有 zip 檔案,列印總和資訊

unzip  -ca  letters  \*.tex  |  more

要將名稱以 .tex 結尾的 letters.zip 的所有成員提取為標準輸出,自動轉換為本地行尾約定,並將輸出傳遞給 more 程式

unzip  -p  articles  paper1.dvi  |  dvips

將二進位制檔案解壓到標準輸出,並且通過管道送到另一個列印程式

unzip  source.zip  "*.[fch]"  Makefile  -d  /tmp

將所有的 c 語言和 FORTRAN 語言的原始檔,以及 Makefile 解壓到 /tmp 目錄

unzip  -C  source.zip  "*.[fch]"  makefile  –d  /tmp

將所有的 c 語言和 FORTRAN 語言的原始檔,以及 Makefile 解壓到 /tmp 目錄(忽略所有的大小寫)

unzip  -aaCL  source.zip  "*.[fch]"  makefile  –d  /tmp

提取任何此類檔案,但將 ms-dos vms 中任何大寫名稱轉換為小寫,並將所有檔案的行尾轉換為本地標準。

unzip  -fo  sources

僅提取當前目錄中已經存在的較新版本的檔案,而不進行查詢

unzip  -uo  sources

提取當前目錄中已存在的較新版本的檔案,並建立尚未存在的任何檔案。

unzip  –v

要顯示診斷螢幕,顯示哪些解壓縮和 zipinfo 選項儲存在環境變數中,是否在環境變數中編譯解密支援,以及編譯解壓縮的編譯器等等

unzip  -l  file.zip

只是列出內容

unzip  -ql  file.zip

雙倍安靜的列表

unzip  --ql  file.zip

unzip  -l-q  file.zip

unzip  -l--q  file.zip

標準的列表

 

6 、診斷資訊

退出碼

說明

正常,沒有錯誤資訊

1

遇到一個或多個警告錯誤,但仍然成功地完成了處理。這包括由於不支援的壓縮方法或密碼未知的加密而跳過一個或多個檔案的zip檔案。

2

檢測到zip檔案格式中的通用錯誤。無論如何,處理可能已經成功完成;一些由其他歸檔程式建立的損壞的zip檔案具有簡單的工作環境。

3

檢測到zip檔案格式出現嚴重錯誤。處理可能立即失敗

4

在程式初始化期間,unzip無法為一個或多個緩衝區分配記憶體。

5

unzip 無法分配記憶體,也無法獲取TTY來讀取解密密碼。

6

unzip 過程中無法將記憶體分配給磁碟。

7

unzip 無法在記憶體解壓縮期間分配記憶體.

8

當前還沒有用到這個退出碼

9

指定的壓縮檔案沒有找到

10

非法的選項

11

找不到匹配的檔案

50

磁碟已經滿了

51

ZIP 存檔的結尾是過早地遇到的。

80

使用者使用ctrl+c終止瞭解壓過程

81

由於不支援的壓縮方法或不支援的解密,一個或多個檔案的測試或提取失敗

82

由於解密密碼錯誤,沒有找到任何檔案。(但是,即使成功處理了一個檔案,退出狀態也是1。)

 

7 、例項

1 )顯示備註資訊

[root@localhost weijie]#  zip 1.zip 1.c            // 壓縮

  adding: 1.c (deflated 9%)

[root@localhost weijie]#  unzip -z 1.zip           // 顯示備註

Archive:  1.zip

2 )顯示壓縮包內的檔案資訊

[root@localhost weijie]#  unzip -l 1.zip

Archive:  1.zip

  Length      Date    Time    Name

---------  ---------- -----   ----

       53  09-19-2018 16:08   1.c

---------                     -------

       53                     1 file

3 )解壓

[root@localhost weijie]# unzip -n -v 1.zip                // 顯示解壓過程

Archive:  1.zip

 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name

--------  ------  ------- ---- ---------- ----- -------- ----

      53  Defl:N       48   9% 09-19-2018 16:08 1c3e46be  1.c

--------          -------  ---                            -------

      53               48   9%                            1 file

 




來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29270124/viewspace-2284099/,如需轉載,請註明出處,否則將追究法律責任。

相關文章