# 1.命令简介
unzip 命令用于列出、测试和提取 ZIP 存档中的压缩文件。
如果 unzip 不跟任何选项(默认行为),会将指定的 ZIP 存档文件解压到当前目录。
# 2.命令格式
unzip [-Z] [OPTIONS] [ZIP_FILE...] [FILE...] [-x FILE...] [-d EXDIR]
[ZIP_FILE...] 表示 ZIP 存档文件,[FILE...] 表示待处理的 ZIP 存档文件中的文件列表,[-x FILE...] 表示不处理的文件列表,[-d EXDIR] 表示解压缩后的文件存放的目录。文件名均可使用通配符表示。
注意,unzip 可以不跟任何选项和参数,单独执行 unzip 将打印简要帮助信息。
# 3.选项说明
长选项的强制参数对于短选项也是强制的。下面主要介绍了通用选项和 Linux 平台的选项,其它平台(VMS、MS-DOS、MacOS 等)的专用选项参见 unzip(1) 手册。
-Z
等于执行 zipinfo(1) 命令,用于查看 zip 文件的整体信息
-c
将解压缩后的文件内容输出到标准输出(屏幕),并对字符做适当的转换。类似于 -p 选项,但是 -c 会输出文件名
-f
更新现有的文件,即只提取那些已经存在于磁盘上且比磁盘副本更新的文件
-l
只显示压缩文件内所包含的文件不解压
-p
与 -c 选项类似,以二进制模式解压文件,不会执行任何的转换,并将文件内容输出到标准输出(屏幕)
-t
对文件进行 CRC 校验检查压缩文件是否正确
-u
与 -f 参数类似,但是除了更新现有的文件外,也会将压缩文件中的其他文件解压出来
-v
执行时显示详细的信息
-z
仅显示压缩文件的备注信息
-a
对文本文件进行必要的字符转换
-b
将所有文件视为二进制文件,不对文本文件进行字符转换
-B
对本地即将被覆盖的文件进行备份
-C
匹配命令行指定的待提取的文件列表时不区分大小写
-D
不还原提取项的时间戳。正常情况,unzip 会恢复提取项的时间信息(Access Time、Modify Time 和 Change Time)
-j
不生成提取项的目录,即所有提取项均放到同级目录下
-L
将压缩文件中的全部文件名改为小写
-M
将所有输出通过 unzip 内部的类似于 more(1) 的浏览工具进行浏览
-n
永远不要覆盖现有文件。如果文件已经存在,则跳过该文件的提取而不提示。默认情况下,unzip 会进行询问是否提取、覆盖或重命名
-o
覆盖现有文件而不提示
-P PASSWORD
使用密码解密 zip 文件
-q
执行时不显示任何信息
-s
将文件名中的空白字符转换为下划线
-U
修改或禁用UTF-8处理。当 UNICODE_SUPPORT 可用时,选项 -U 强制 unzip 将 UTF-8 编码的文件名中的所有非 ASCII 字符转义为 #uxxx(对于UCS-2字符,或者对于需要 3 个字节的 UNICODE 码点转为 #Lxxxxxx)。此选项主要用于在怀疑提取 UTF-8 编码文件名时会失败而进行的调试行为
-W
修改通配符 ?(单字符统配符)与 *(多字符通配符) 的匹配行为,使得 ? 与 * 不能匹配目录的分隔符 /。如 "*.c" 匹配 "foo.c",但不能匹配 "mydir/foo.c"
-X
解压缩时同时恢复文件原来的 UID/GID
-:
允许创建提取项的父目录 ../,默认情况下为了安全起见是不允许的。使用该选项应格外小心
-^
允许在提取的 ZIP 存档项的名称中使用控制字符
# 4.常用示例
首先使用 zip 命令对文件 /etc/passwd 和 /etc/group 进行压缩生成 test.zip 文件,同时使用 -z 选项为 zip 文件添加注释说明。
zip test.zip /etc/passwd /etc/group
adding: etc/passwd (deflated 58%)
adding: etc/group (deflated 45%)
enter new zip file comment (end with .):
this is test.zip's comment
.
(1)使用 -Z 选项查看 ZIP 归档文件 test.zip 的整体信息。
unzip -Z test.zip
Archive: test.zip
Zip file size: 1321 bytes, number of entries: 2
-rw-r--r-- 3.0 unx 1552 tx defN 19-Jan-04 14:56 etc/passwd
-rw-r--r-- 3.0 unx 642 tx defN 19-Jan-04 14:56 etc/group
2 files, 2194 bytes uncompressed, 1005 bytes compressed: 54.2%
(2)将压缩文件解压缩至当前目录。
unzip test.zip
(3)如果当前目录存在同名的文件,解压缩时不覆盖原有文件。
unzip -n test.zip
(4)解压缩时覆盖原有文件,不进行询问。
unzip -o test.zip
(5)将压缩文件解压缩至指定目录。
mkdir dir
unzip test.zip -d dir
(6)仅显示 zip 文件的注释说明,不解压。
unzip -z test.zip
Archive: test.zip
this is test.zip's comment
(7)仅查看 zip 文件中的文件列表,不解压。
unzip -l test.zip
Archive: test.zip
this is test.zip's comment
Length Date Time Name
--------- ---------- ----- ----
1552 01-04-2019 14:56 etc/passwd
642 01-04-2019 14:56 etc/group
--------- -------
2194 2 files