列出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”输出结果的交叉。参见下面的描述。
请注意,zipinfo与unzip是相同的程序(在Unix下,是指向它的链接);但是,在某些系统上,编译unzip时可能省略了zipinfo支持。
命令行参数
file[.zip]
ZIP存档的路径。如果file是通配符,则按操作系统(或文件系统)确定的顺序处理每个匹配的文件。只有文件名可以是通配符;路径本身不能。
通配符表达式类似于Unix egrep(1)(常规)表达式,可能包含:
?,匹配一个字符
[…],匹配括号内的任何单个字符;范围由起始字符,连字符和结束字符指定。如果感叹号或插入符号(“!”或“^”)在左括号后面,则括号内的字符范围将被补充(即除括号内的字符外的任何内容都被视为匹配)。要指定逐字左括号,必须使用序列“[[]”。
请务必引用可能由Shell解释或修改的任何字符,特别是在Unix和VMS下。如果未找到匹配项,则假定file是文字文件名;如果失败,则附加后缀.zip。请注意,与任何其他ZIP存档一样,支持自解压ZIP文件;只需明确指定.exe后缀(如果有)。
[file(s)]
要处理的可选的归档成员列表,以空格分隔。(使用VMSCLI定义编译的VMS版本必须使用逗号分隔文件。)正则表达式(通配符)可用于匹配多个成员;参考之前的说明。同样,请务必引用可由Shell扩展或修改的表达式。
[-x xfile(s)]
要从处理中排除的可选归档成员列表。
命令支持的选项及含义
-1
仅列出文件名,每行一个。此选项排除所有其他选项;从不打印标题、尾部、zipfile注释。它适用于Unix Shell脚本。
-2
列表文件名,每行一个,但允许标题(-h),尾部(-t),ZIP文件注释(-z)。如果存储的文件名特别长,则此选项可能很有用。
-s
以简短的Unix的“ls -l”格式列出ZIP文件信息。这是默认行为;见下文。
-m
以中型Unix的“ls -l”格式列出ZIP文件信息。与-s输出相同,但也列出了以百分比表示的压缩因子。
-l
以冗长Unix的“ls -l”格式列出ZIP文件信息。与-m相仿,但是除了打印压缩大小(以字节为单位)而不是压缩比。
-v
以详细的多页格式列出ZIP文件信息。
-h
列表标题行。将打印存档名称、实际大小(以字节为单位)、文件总数。
-M
通过类似于Unix的more(1)命令将所有的输出输入到内部的分页程序。在屏幕输出结束时,zipinfo暂停,显示“–More–”提示符;可以通过按Enter(返回)键或空格键查看下一个屏幕内容。按下“q”键可以终止zipinfo,在某些系统上可以按Enter/Return键终止。与Unix more(1)不同,没有前向搜索或编辑功能。此外,zipinfo不会注意到长行是否在屏幕边缘换行,有效地导致两行或更多行的打印,以及存在某些文本在被查看之前滚动到屏幕顶部的可能性。在某些系统上,未检测到屏幕上可用行的数量,在这种情况下,zipinfo假定高度为24行。
-t
列出的文件或所有文件的列表总数。打印列出的文件数、未压缩和压缩的总大小、它们的总体压缩系数;或者,如果仅打印总计行,则会给出整个存档的值。压缩的总大小不包括每个加密条目的12个附加头字节。请注意,总压缩(数据)大小永远不会与实际的zip文件大小匹配,因为后者包括除压缩数据之外的所有内部zipfile头。
-T
以可排序的十进制格式(yymmdd.hhmmss)打印文件日期和时间。默认日期格式是一个更标准、可读的版本,带有缩写的月份名称(请参阅下面的示例)。
-U
[仅限UNICODE_SUPPORT]修改或禁用UTF-8处理。当UNICODE_SUPPORT可用时,选项-U强制unzip以将UTF-8编码的文件名中的所有非ASCII字符转义为“#Uxxxx”。当怀疑相当新的UTF-8支持会破坏提取的文件名时,此选项主要用于调试目的。
选项-UU允许完全禁用UTF-8编码文件名的识别。解压缩中,文件名编码的处理可以追溯到以前版本的行为。
-z
在列表中包含存档注释(如果有)。
注意事项
与unzip一样,zipinfo的-M(“更多”)选项在处理屏幕输出方面过于简单;如上所述,它无法检测到长行的包裹,从而可能导致屏幕顶部的行在被读取之前被滚动掉。zipinfo应检测并处理每次出现的换行,作为另外一行打印。这要求了解屏幕的宽度和高度。此外,zipinfo应检测所有系统上的真实屏幕几何。
zipinfo的列表格式行为不必要地复杂,应该简化。(这并不是说它会。)
TIPS
作者发现在允许别名的系统上,定义zipinfo的别名ii很方便(或者,在其他系统上,复制/重命名可执行文件,创建链接或创建名称为ii的命令文件)。ii用法与Unix中长列表的常用ll别名相似,并且两个命令的输出之间的相似性是有意的。
详细说明
zipinfo有许多模式,如果不熟悉Unix ls(1)(或者即使是一个),它的行为也很难理解。默认行为是按以下格式列出文件:
最后三个字段是文件的修改日期和时间及其名称。文件名的大小写是原样的;因此来自MS-DOS PKZIP的文件总是大写。如果文件使用存储的目录名称压缩,则该文件也会显示为文件名的一部分。
第二个和第三个字段表示该文件在Unix下使用zip version 1.9压缩。由于它来自Unix,因此行开头的文件权限以Unix格式打印。未压缩的文件大小(在此示例中为2802)是第四个字段。
第五个字段由两个字符组成,其中任何一个字符都可以包含多个值:
- 第一个字符可以是“t”或“b”,表示zip分别认为文件是文本或二进制文件;但是如果文件是加密的,zipinfo通过大写字符(“T”或“B”)来记录。
- 第二个字符也可以取四个值,具体取决于是否存在“扩展本地标题”和与文件关联的“额外字段”(在PKWare的APPNOTE.TXT中完全解释,但基本上类似于ANSI C中的编译指示–即,它们提供了在档案中包含非标准信息的标准方法。如果两者都不存在,则该字符将为连字符(“-”);如果有一个“扩展本地标题”但没有“额外字段”,’l’;如果相反,`x’;如果两者都存在,则为“X”。因此,此示例中的文件(可能)是文本文件,未加密,并且既没有“额外字段”也没有与之关联的“扩展本地标头”。
另一方面,下面的示例是带有“额外字段”的加密二进制文件:
额外字段用于各种目的(请参阅下面的-v选项的讨论),包括VMS文件属性的存储,这可能就是这里的情况。请注意,文件属性以VMS格式列出。主机操作系统(实际上是一个误称 – “主机文件系统”更正确)的一些其他可能性包括OS/2、HPFS NT,MS-DOS,OS/2 FAT NT,Macintosh。这些表示如下:
-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,imploding,tokenizing(从未公开发布),deflating。此外,有四个reducing级别(1 – 4);四种类型的imploding(4K or 8K sliding dictionary, 2 or 3 Shannon-Fano tree);四个deflating级别(superfast, fast, normal, maximum compression)。zipinfo表示这些方法及其子方法如下:stor;re:1, re:2, 等等;shrk;i4:2, i8:3, 等等;tokn;defS, defF, defN, defX。
中、长列表几乎与短格式相同,只是它们添加了有关文件压缩的信息。中等格式将文件的压缩因子列为百分比,表示已“删除”的空间量:
在此示例中,文件已压缩超过五倍; 压缩数据仅为原始大小的19%。长格式给出压缩文件的大小(以字节为单位):
与unzip列表相反,此列表格式中的压缩大小数字表示压缩数据的完整大小,包括加密条目的12个额外报头字节。
添加-T选项会将文件日期和时间更改为十进制格式:
请注意,由于用于存储文件时间的MS-DOS格式的限制,秒字段始终四舍五入到最接近的偶数秒。对于Unix文件,预计会在zip(1)和unzip的下一个主要版本中进行更改。
除了单个文件信息之外,默认的zipfile列表还包括标题和尾部行:
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和-t选项来覆盖它。在这种情况下,还必须明确指定列表格式,因为在没有其他选项的情况下-h或-t(或两者)意味着仅列出标题或尾部行(或两者)。请参阅下面的“示例”部分,了解这种无意义的半透明翻译。
冗长列表大多是不言自明的。它还列出了文件注释和zipfile注释(如果有),以及任何存储的“额外字段”中的字节类型和数量。目前已知类型的额外字段包括PKWARE的认证(“AV”)信息;OS/2扩展属性;VMS文件系统信息,包括PKWARE和Info-ZIP版本;Macintosh资源分叉;Acorn/Archimedes SparkFS信息;等等。(注意,在OS/2扩展属性的情况下 – 可能是zipfile额外字段的最常见用法 – zipinfo报告的存储EA的大小可能与OS/2的dir命令给出的数字不匹配:OS/2始终报告16位格式所需的字节数,而zipinfo始终报告32位存储。)
同样,各个条目的压缩大小数字包括加密条目的12个额外标题字节。相比之下,在底部行中显示的存档总压缩大小和平均压缩比,计算摘要时没有额外的12个头字节的加密条目。
相关环境变量
由于zipinfo尝试以直观但类似于Unix的方式处理各种默认值,因此通过置于环境变量中的选项修改zipinfo的默认行为可能有点复杂。然而,有一些潜在的逻辑。简而言之,选项有三个“优先级”:默认选项;环境选项,可以覆盖或添加默认值;用户提供的显式选项,可以覆盖或添加上述任一选项。
如上所述,默认列表格式大致对应于“zipinfo -hst”命令(除非指定了单个zipfile成员)。喜欢长列表格式(-l)的用户可以使用zipinfo的环境变量来更改此默认值:
此外,如果用户不喜欢尾部行,则可以使用zipinfo的“否定选项”概念来覆盖该行的默认包含。这是通过在不希望的选项之前,用一个或多个减号来实现的:例如,在该示例中为“-l-t”或“–tl”。第一个连字符是常规开关字符,但“t”之前的字符是减号。连字符的双重使用可能看起来有点尴尬,但它仍然相当直观:只需忽略第一个连字符并从那里开始。它也与Unix命令nice(1)的行为一致。
如上所述,VMS的默认变量名称是ZIPINFO_OPTS(其中用于安装zipinfo作为外部命令的符号,否则将与环境变量混淆),以及用于所有其他操作系统的ZIPINFO。为了与zip(1)兼容,也接受ZIPINFOOPT。但是,如果同时定义了ZIPINFO和ZIPINFOOPT,则ZIPINFO优先。unzip的诊断选项(没有zipfile名称的-v选项)可用于检查所有四个可能的unzip和zipinfo环境变量的值。
使用示例
要获得ZIP存档storage.zip的完整内容的基本、短格式列表,包括标题行和总计行,请仅使用存档名称作为zipinfo的参数:
要生成基本的长格式列表(不详细),包括标题和总计行,请使用-l:
要列出没有标题和总计行的存档的完整内容,请取消-h和-t选项,或者明确指定内容:
# zipinfo storage \*
(只有当Shell以其他方式扩展`*’通配符时,才需要反斜杠,就像Unix中启用globbing时一样 – 星号周围的双引号也会起作用)。要在默认情况下关闭总计行,请使用环境变量(此处假设为C shell):
# zipinfo storage
要再次获得第一个示例的完整、短格式列表,假设环境变量的设置与前一个示例相同,则必须明确指定-s选项,因为-t选项本身意味着只有 页脚行将被打印:
# zipinfo -t storage [only totals line]
# zipinfo -st storage [full listing]
除非另行指定,否则-s选项(如-m和-l)默认包括页眉和页脚。由于环境变量没有指定页脚,并且优先级高于-s的默认行为,因此生成完整列表需要使用显式的-t选项。但是,没有任何关于标题的指示,所以-s选项就足够了。请注意,-h和-t选项在它们独自使用或彼此使用时,都会覆盖任何默认的成员文件列表;只打印页眉和/或页脚。当zipinfo与通配符zipfile规范一起使用时,此行为很有用;然后使用单个命令汇总所有zip文件的内容。
要以中等格式列出存档中单个文件的信息,请明确指定文件名:
任何成员文件的规范,如本例所示,将覆盖默认标题和总计行; 只打印有关所请求文件的单行信息。这直观地是在请求有关单个文件的信息时所期望的。对于多个文件,了解总压缩和未压缩大小通常很有用; 在这种情况下-t可以明确指定:
要获取有关ZIP存档的最大信息,请使用verbose选项。如果操作系统允许,通常将输出管道输入到Unix的more(1)分页程序中是明智的:
最后,要查看归档中最近修改过的文件,请将-T选项与外部排序实用程序,如Unix的sort(1)(以及此示例中的sed(1))一起使用:
sort(1)的-nr选项告诉它以相反顺序,而不是文本顺序进行数字排序,-k 7选项告诉它对第七个字段进行排序。这假设是默认的短列表格式;如果使用-m或-l,则正确的sort(1)选项将为-k 8。旧版本的sort(1)不支持-k选项,但您可以使用传统的+选项,例如+6而不是-k 7。sed(1)命令保留列表前15行。zipinfo的未来版本可能将日期/时间和文件名排序合并为内置选项。
相关手册
ls(1), funzip(1), unzip(1), unzipsfx(1), zip(1), zipcloak(1), zipnote(1), zipsplit(1)
The Info-ZIP home page is currently at http://www.info-zip.org/pub/infozip ftp://ftp.info-zip.org/pub/infozip
参考文献
- man 1 zipinfo, Version 6.0-21
更新日志
- 09/23/2018 创建文章