zipinfo -
列出關於某個ZIP壓縮包的詳細資訊
zipinfo [
-12smlvhMtTz]
file[
.zip] [
file(s) ...] [
-x xfile(s) ...]
unzip -Z [
-12smlvhMtTz]
file[
.zip] [
file(s) ...] [
-x xfile(s) ...]
zipinfo
列出某個ZIP檔案中的所包含檔案的技術資訊,
它們絕大多數和MS-DOS系統中的相同.資訊包括檔案許可權設定,加密狀態,壓縮型別,
以及壓縮程式的版本和所在的作業系統或者檔案系統等.預設時將為檔案中的每一個
檔案列出一行,並在首行和末行給出整個檔案的概括資訊.其輸出的格式介於Unix中
``ls -l''和 ``unzip
-v''的輸出結果.參看下面的
詳細描述 DEATILED DESCRIPTION .
請注意
zipinfo與
unzip
是同一個程式
(在Unix中,是一個對它的連線);
然而在有些系統上,
zipinfo 的支援在
unzip
整合後已被忽略.
-
file[.zip]
- ZIP
壓縮包的路徑.如果指定的檔案是一個萬用字元,那麼將按照某種作業系統或者
檔案系統所決定的順序處理每一個匹配的檔案.只有檔名可以是萬用字元.路徑本
身不可以.萬用字元表示式和
Unix 中的 egrep(1)
正則表示式相似,可能包括:
- *
- 匹配一個0或者任意多個字元組成的序列
- ?
- 精確匹配一個字元
- [...]
- 匹配中括號中的任何單個字元;也可以透過首字元,連字元和末字元指定一個匹配範圍.如果一個驚歎號或者插入符(`!'或者`^')緊跟左括號;那麼將對括號中的內容取補集(也就是說,
任何不屬於括號中的字元將被匹配).
- (如果有任何字元會被作業系統所改變,請使用引號,特別是在
Unix 或者 VMS
中)如果沒有匹配項出現,那麼指定的內容將被認為是原始的檔名;如果這樣做也失敗,那麼將嘗試追加
.zip
字尾.注意自解壓的ZIP檔案是支援的;只要明確指定
.exe 字尾即可.
- [file(s)]
- 指定一個可選的待處理的檔案列表.正則表示式(萬用字元)可以用來匹配多個成員;如上所述.再次提醒如果表示式會被作業系統所擴充套件或者修改要使用引號.
- [-x xfile(s)]
- 指定一個可選的將被忽略的檔案列表.
- -1
- 只列出檔名,一行一個.這個選項具有完全的排它性;首末行資訊以及壓縮檔案的描述資訊將不會被輸出.它可以在Unix的Shell指令碼中使用.
- -2
- 只列出檔名,一行一個,但是允許輸出首行資訊
( -h), 末行資訊(-t)
和壓縮檔案描述資訊 (
-z).
這個選項在檔名特別長的情況下或許有用.
- -s
- 以Unix的 ``ls -l''
的短格式列出壓縮檔案的資訊.這是預設的,詳情見下.
- -m
- 以 Unix的 ``ls -l''
的中長格式列出壓縮檔案的資訊.和
-s
的輸出結果相同,但是它會列出以百分數表示的壓縮比率.
- -l
- 以 Unix的 ``ls -l''
的長格式列出壓縮檔案的資訊.和
-m
輸出結果相同,除了壓縮比率被壓縮後的檔案大小(以位元組為單位)所取代外.
- -v
- 詳細地以多頁方式列出壓縮檔案的資訊.
- -h
- 列出首行資訊.並輸出檔案名字,實際大小(以位元組為單位)以及檔案數目.
- -M
- 將所有的輸出以和
Unix 中 more(1)
命令相似的內部頁的方式輸出.在螢幕輸出的末尾,
zipinfo
將會暫停,並給出``--More--''
提示;可以按Enter(Return)或者空格鍵檢視下一屏內容.按``q''
鍵(在某些系統上可能是Enter/Return鍵)可以結束
zipinfo
.與Unix中的more命令所不同,
zipinfo
沒有向前搜尋和編輯功能.同時,
zipinfo
對於螢幕末的長行,不能有效地將它按兩行或者多行顯示出來,導致
zipinfo
螢幕上方的一些文字在被瀏覽之前就捲過.在有些系統上螢幕上的可顯示行的數目是不能被取得的,在這種情況下,
zipinfo 假定為24行.
- -t
- 列出所有或者要求被列出檔案的總體資訊.輸出檔案的數目,壓縮前後的總大小,以及總的壓縮係數;或者如果只有總體資訊被打印出,則給出整個檔案的資訊.請注意總的壓縮資料的大小總是不同於實際的壓縮檔案的大小,這是因為後者包括了作為壓縮資料附屬物的所有的壓縮檔案內部的頭資訊.
- -T
- 以按點分十進位制的格式(yymmdd.hhmmss)排序輸出檔案的日期和時間.預設的日期格式是一個更加標準的,使用者易讀的,使用月份名縮寫(參看下文)的版本.
- -z
- 包含檔案中的描述資訊(如果有的話).
zipinfo
有很多種工作方式,如果不太熟悉
Unix 中的
ls(1)
(或者即使熟悉)的話,要掌握好它的使用也是比較困難的.預設的方式是以如下的格式列出檔案:
-rw-rws--- 1.9 unx 2802 t- defX 11-Aug-91 13:48 perms.2660
最後的三個欄位分別是檔案的修改日期和時間,還有檔名.檔名的大小寫是區分的,這樣來自MS-DOS
PKZIP的壓縮檔案總是被大寫.如果被壓縮的檔案儲存了路徑名,也將被看作是檔名的一部分而被顯示.
第二,三個欄位表示了檔案是在
Unix 下以 1.9 版的
zip
壓縮的.由於它來自 Unix
,行開頭的檔案的存取許可權以Unix
格式輸出.壓縮前的檔案大小(本例中為2802)在第四個欄位中給出.
第五個欄位包含了兩個字元,它們中的每個都能取若干個值.第一個字元可能是`t'或者`b',相應地表示檔案是文字的或者是二進位制的;但是如果檔案被加密,
zipinfo
透過大寫字元(`T'或者`B')來表示.第二個字元可以取四個值,它依賴於是否存在一個本地的頭資訊並且/或者一個和那個檔案相關的
"額外"
欄位(詳細解釋參看 PKWare's
APPNOTE.TXT,它基本上類似於ANSI
C中的pragmas,它們提供了一種包含非標準資訊的標準方法).如果兩者都不存在,該欄位為連字元(`-');如果有一個擴充套件的本地頭資訊但是沒有額外欄位,則為`l';反之為`x';如果都存在,則為`X'.這樣上面示例中的檔案(很可能)是一個未被加密的文字檔案,並且沒有額外欄位和本地頭資訊與之相關聯.下面的例子則是一個有額外資訊的二進位制檔案.
RWD,R,R 0.9 vms 168 Bx shrk 9-Aug-91 19:15 perms.0644
額外的欄位的使用是為了滿足不同的需要(參看下面選項
-v
的討論)包括這裡討論所假設的情況:VMS
檔案的儲存特性.
一些其他的可能是為了處理作業系統(這是一個誤解,實際應該是檔案系統更恰當些)包括
OS/2
或者使用高效能檔案系統
(HPFS) 的 NT ,MS_DOS, OS/2
或者使用檔案獲取表 (FAT)
作為檔案系統的 NT,
Macintosh.它們被如下所標示:
-rw-a-- 1.0 hpf 5358 Tl i4:3 4-Dec-91 11:33 longfilename.hpfs
-r--ahs 1.1 fat 4096 b- i4:2 14-Jul-91 12:58 EA DATA. SF
--w------- 1.0 mac 17357 bx i8:2 4-May-92 04:02 unzip.macr
前兩個例子的檔案的屬性以類Unix的格式表示,其中七個子域分別表示該檔案是否(1)是一個目錄,(2)是可讀的(總是)(3)是可寫的,(4)是可執行的(猜測建立在假定它們的副檔名為
.exe,
.com,
.bat,
.cmd和
.btm
的基礎上)(5)有它的歸檔位設定,(6)是隱藏的和(7)是一個系統檔案.由於一些
Macintosh
歸檔工具不儲存任何檔案資訊,
Macintosh
檔案的解釋是不可信的.
最後,第六個欄位表示了壓縮使用的方法和子方法.
現在已知有六種方法:儲存法(storing)(無壓縮),縮減法(reducing),收縮法(shrinking),
內爆法(impoding),標誌法(tokenizing)(從來沒有公開發布)和緊縮法(deflating).
更進一步,縮減法有4種級別(從1到4);內爆法有4種類型(4K或者8K的滑動字典,和2或者3個Shannon-Fano樹);緊縮法也有4個層次(超快,快,正常,最大壓縮).
zipinfo
用如下的方式代表了這些方法和子方法:
stor;
re:1,
re:2, etc.;
shrk;
i4:2,
i8:3, etc.;
tokn; and
defS,
defF,
defN, and
defX.
中長和長列表格式顯示幾乎和短列表相同,除去它們附加了檔案壓縮方面的資訊.中長格式以百分數列出了檔案壓縮率,它代表了被節省的空間:
-rw-rws--- 1.5 unx 2802 t- 81% defX 11-Aug-91 13:48 perms.2660
在這個例子中,檔案以超過5倍的比例被壓縮;壓縮後的資料大小僅為原是大小的19%.長格式則以以位元組大小為單位的壓縮後文件大小表示該資訊:
-rw-rws--- 1.5 unx 2802 t- 538 defX 11-Aug-91 13:48 perms.2660
增加
-T
選項則將檔案的日期和時間以點分格式輸出:
-rw-rws--- 1.5 unx 2802 t- 538 defX 910811.134804 perms.2660
注意到因為 MS-DOS
格式中用來儲存檔案時間的限制,第二個域總是取值為最近的偶數秒.對於
Unix 檔案
zip(1L) 和
unzip
很可能在它們的下一個版本中改變.
作為單獨檔案資訊的補充,預設的輸出還包括頭和末資訊行:
Archive: OS2.zip 5453 bytes 5 files
,,rw, 1.0 hpf 730 b- i4:3 26-Jun-92 23:40 Contents
,,rw, 1.0 hpf 3710 b- i4:3 26-Jun-92 23:33 makefile.os2
,,rw, 1.0 hpf 8753 b- i8:3 26-Jun-92 15:29 os2unzip.c
,,rw, 1.0 hpf 98 b- stor 21-Aug-91 15:34 unzip.def
,,rw, 1.0 hpf 95 b- stor 21-Aug-91 17:51 zipinfo.def
5 files, 13386 bytes uncompressed, 4951 bytes compressed: 63.0%
頭行給出了檔案的名字,它的總大小,總的檔案數;末行給出了所列出的檔案數,它們總的解壓後的大小和它們總的解壓前的大小(不包含任何的
zip
內部的部分).但是,如果指定一個或者若干的檔案,則頭資訊和末資訊將不會列出.這種行為與Unix中的
``ls -l''
類似;可以透過明確指定
-h h或者
-t
選項強制顯示.
在這種情況下,由於
-h
或
-t
(或同時)而沒有其他選項意味著只有頭資訊或者末資訊(或同時)被列出,列表的格式同樣需要明確地指定.對此可參看下面
"示例 EXAMPLES"
部分獲得這個無意義的半智慧化的轉化.
冗餘的列表顯示內容大多數都是自解釋的.它還列出了檔案和檔案檔案的描述,如果有的話,還列出所有儲存在額外域中的型別和位元組數.當前已知的額外域的型別包括
PKWARE 的認證(``AV'')資訊;OS/2
擴充套件屬性;VMS
檔案系統資訊,PLWARE 和 Info-ZIP
的版本; Macintosh 的resource forks;Acorn/Archimedes
SparkFS
資訊等等.(對於OS/2的擴充套件屬性(壓縮檔案額外域中最常用的部分)
zipinfo 報告的 EAs
的儲存大小可能與 OS/2
使用
dir
命令給出得結果不一致:OS/2
總是以16位格式輸出位元組數,而
zipinfo
總是以32位儲存輸出.)
透過設定在環境變數中的選項可以改變
zipinfo
的預設的工作方式,但是解釋起來稍微有點複雜,
這是因為
zipinfo
試圖以一種直觀,類 Unix
的方式進行預設工作.(不要笑)然而這裡有一些內在的邏輯.簡言之,選項有三個優先等級:預設選項;環境選項,它是優先於預設選項的,並作為其的補充;使用者傳遞的明確的選項,它是優先於上述兩類並作為其補充的.
預設的輸出列表格式,正如上述描述的,粗略地對應於
"zipinfo -hst"
命令(除非指定一個單獨的壓縮檔案).
一個偏愛長輸出格式 (
-l) 的使用者能夠使用
zipinfo的環境變數來改變預設的運作:
- Unix Bourne shell:
- ZIPINFO=-l; export ZIPINFO
- Unix C shell:
- setenv ZIPINFO -l
- OS/2 or MS-DOS:
- set ZIPINFO=-l
- VMS (quotes for lowercase):
- define ZIPINFO_OPTS "-l"
另外,如果使用者不喜歡末行資訊,
zipinfo
的"反選項"的概念可以用來覆蓋預設的總結行資訊.這可以透過在不想使用的選項前加上減號實現:例如,,在這個例子中可以使用``-l-t''
或者 ``--tl''
.第一個連字元是規則開關符,而`t'之前的那個是減號.連續使用兩個連字元看起來有些笨拙.但是從直覺出發並非無意義:只用忽略第一個連字元並從此開始.它同樣和Unix命令中的
nice(1) 相一致.
正如上面所提到的,對於VMS預設的環境變數是ZIPINFO_OPTS(否則將作為一個安裝
zipinfo
的外來命令和環境變數相混淆),而對於其它的作業系統則是ZIPINFO.為了與
zip(1L)
相容,ZIPINFOOPT也被接受(不要問為什麼).如果ZIPINFO和ZIPINFOOPT均被定義,則ZIPINFO優先.
unzip 的診斷選項(
-v
且沒有壓縮檔名)能夠用來檢查所有的四個可能的
unzip 和
zipinfo 環境變數.
要獲得一個壓縮檔案
storage.zip
的基本的,短格式輸出的完整的內容,幷包含頭末行資訊,使用檔案名作為zipinfo
的引數即可:
zipinfo storage
要獲得一個基本的,長格式(非冗餘)的,包含頭末行資訊的列表,用
-l:
zipinfo -l storage
要獲得一個檔案的完整內容,並且不包含頭末行資訊,可以使用
-h 和
-t
的反選項,也可以明確指定顯示內容:
zipinfo --h-t storage
zipinfo storage \*
(這裡的反斜槓 (backslash `´)
只是在 shell 會將 `*'
萬用字元擴充套件時才必要,正如在
Unix
中雙引號擴起來的星號將會全域性有效).如果要預設關閉所有的行顯示,可以使用環境變數(這裡假設是C
shell):
setenv ZIPINFO --t
zipinfo storage
要獲得第一個例子的完整的,短格式的列表輸出,如果環境變數已經象前面的那樣設定好了,就需要明確指定
-s 選項,因為
-t
選項本身只表示輸出末行資訊:
setenv ZIPINFO --t
zipinfo -t storage [only totals line]
zipinfo -st storage [full listing]
-s 選項和
-m 和
-l,
選項一樣,預設情況下包含了頭末行資訊,除非另外指定,因為規定不顯示末行資訊的環境變數較之於預設的
-s
選項的優先權更高,因此為了得到完整的列表輸出,就需要明確指定
-t
選項.沒有什麼(環境變數)與頭資訊相關連,因此
-s
選項就足夠了.請注意當使用
-h 和
-t
選項的時候,將不顯示任何預設的檔案列表;只顯示頭和/或末資訊.在使用一個萬用字元作為
zipinfo
的引數的時候,這種模式是有用的;所有檔案的內容只用一個命令就歸納出了.
要以中長格式列出檔案中的一個單獨檔案的資訊,只用明確指定檔名就可以了:
zipinfo -m storage unshrink.c
指定任何一個檔案成員的檔名,就象在本例一樣,將不再顯示預設的頭末資訊;只有顯示特定檔案資訊的那行將被輸出.當要獲得某個單獨的檔案的資訊的時候這種模式符合直覺.對於多個檔案的情形,知道總共的壓縮前後的檔案的大小常是有用的;在這種情況下
-t
選項常需要明確指定:
zipinfo -mt storage "*.[ch]" Mak\*
為了獲得一個ZIP檔案的完全資訊,可使用冗餘選項.如果作業系統允許的話把輸出重定向至一個過濾器例如Unix中的
more(1) 通常是明智之舉:
zipinfo -v storage | more
最後,為了檢視檔案中最近修改的檔案,可使用
-T
選項配合外部的排序程式比如
Unix 中的
sort(1)
(還有這個例子中的
tail(1) ):
zipinfo -T storage | sort -n +6 | tail -15
-n 選項告訴
sort(1)
以數字大小排序而不是
ASCII 順序,
+6
選項意為以第一個後面的第六個欄位排序(也就是說是第七個欄位).這裡假定是預設的短格式輸出;如果使用了
-m 或者
-l
選項,則正確的
sort(1)
選項將是
+7.
tail(1)
命令除去最後15行以外的所有內容.以後的版本的
zipinfo
可能會整合日期/時間和檔名的排序於內建的選項.
作者發現如果在可以使用別名的系統(或者允許在系統上複製/重新命名可執行程式,建立連結或者可以以
ii
為名建立一個命令檔案)上定義
zipinfo 的別名為
ii
將會帶來很大的方便.
ii
的用法和通常的作為Unix中長格式輸出的別名的
ll
相平行,而且兩個命令的輸出的相似性是有意義的.
相對於
unzip,
zipinfo 的
-M
(``more'')
選項總體上來說在處理螢幕輸出時是過於簡單了;正如上面指出的,它不能正確地發現過長的行,因此很可能引起螢幕上端的行在被讀取之前就被滾動略過.如果附加一個額外的行,
zipinfo
應該能發現並且處理這種情況.這需要獲得螢幕的寬和高.並且,
zipinfo
還要獲得所有系統中的螢幕的真實尺寸.
zipinfo的按列輸出的模式是沒有必要那麼複雜的,應進行簡化(這裡並不是說將會的到簡化).
ls(1),
funzip(1L),
unzip(1L),
unzipsfx(1L),
zip(1L),
zipcloak(1L),
zipnote(1L),
zipsplit(1L)
The Info-ZIP home page is currently at
http://www.info-zip.org/pub/infozip/
或
ftp://ftp.info-zip.org/pub/infozip/ .
Greg ``Cave Newt'' Roelofs. ZipInfo 包含了Mark
Adler的模式匹配的程式碼以及其他很多人的修正/改進.請參考UnZip源程式釋出中的CONTRIBS檔案獲得更加完整的列表.
嚴亞勤 <[email protected]>
2003.11.22
http://cmpp.linuxforum.net
本頁面中文版由中文 man
手冊頁計劃提供。
中文 man 手冊頁計劃:
https://github.com/man-pages-zh/manpages-zh