unzip是Linux系统中用于解压ZIP格式压缩文件的命令行工具。ZIP是一种广泛使用的压缩文件格式,特别是在Windows系统中非常流行。unzip可以解压.zip文件,查看压缩包内容,并支持密码保护的ZIP文件。
unzip [选项] 压缩文件[.zip] [文件...] [-x 排除文件...] [-d 目标目录]
| 选项 | 说明 |
|---|---|
-l |
列出压缩包中的文件列表,但不解压 |
-t |
测试压缩文件的完整性 |
-z |
显示压缩文件的注释 |
-v |
详细模式,显示更多信息 |
-n |
解压时不覆盖已存在的文件 |
-o |
解压时覆盖已存在的文件,不询问 |
-d 目录 |
指定解压到的目标目录 |
-x 文件 |
解压时排除指定的文件 |
-j |
忽略目录结构,将所有文件解压到同一目录 |
-P 密码 |
使用密码解压加密的ZIP文件 |
-q |
安静模式,不显示解压过程信息 |
-C |
解压时忽略文件名大小写(某些版本支持) |
-L |
将文件名转换为小写 |
-U |
将文件名转换为大写 |
-X |
恢复文件的所有者/组信息(需要root权限) |
-K |
保留setuid/setgid/sticky位属性 |
-T |
设置时间戳(使用压缩文件中的时间) |
-a |
自动转换文本文件编码(如CRLF到LF) |
-aa |
将所有文件视为文本文件进行编码转换 |
大多数Linux发行版默认安装了unzip工具。如果没有安装,可以使用以下命令:
sudo apt update
sudo apt install unzip
sudo yum install unzip
# 或使用dnf(Fedora/RHEL8+)
sudo dnf install unzip
sudo pacman -S unzip
# 下载源码
wget https://sourceforge.net/projects/infozip/files/UnZip%206.x%20%28latest%29/UnZip%206.0/unzip60.tar.gz
# 解压
tar xzf unzip60.tar.gz
cd unzip60
# 编译安装
make -f unix/Makefile generic
sudo make -f unix/Makefile install
解压ZIP文件到当前目录:
# 下载或创建一个测试ZIP文件
echo "Test content" > file1.txt
echo "More content" > file2.txt
zip archive.zip file1.txt file2.txt
# 基本解压
unzip archive.zip
# 查看解压的文件
ls -l
将ZIP文件解压到特定目录:
# 创建目标目录
mkdir extracted_files
# 解压到指定目录
unzip archive.zip -d extracted_files/
# 查看结果
ls -l extracted_files/
不解压,只查看ZIP文件中的内容:
# 简单列表
unzip -l archive.zip
# 详细列表(类似ls -l)
unzip -v archive.zip
# 查看压缩文件注释
unzip -z archive.zip
检查ZIP文件是否完整无损:
# 测试压缩文件
unzip -t archive.zip
# 测试多个文件
unzip -t *.zip
# 如果测试成功,会显示"OK"
从ZIP文件中提取特定文件或使用通配符:
# 提取单个文件
unzip archive.zip file1.txt
# 提取多个文件
unzip archive.zip file1.txt file2.txt
# 使用通配符提取文件
unzip archive.zip "*.txt"
# 提取特定目录中的文件
unzip archive.zip "subdir/*"
解压时排除某些文件:
# 排除特定文件
unzip archive.zip -x file1.txt
# 排除多个文件
unzip archive.zip -x file1.txt file2.txt
# 排除特定类型的文件
unzip archive.zip -x "*.log"
解压需要密码的ZIP文件:
# 创建加密的ZIP文件(需要安装zip)
zip -e encrypted.zip file1.txt
# 提示输入密码
# 解压加密文件(方法1:命令行指定密码)
unzip -P mypassword encrypted.zip
# 解压加密文件(方法2:交互式输入密码)
unzip encrypted.zip
# 提示输入密码
# 注意:命令行指定密码可能不安全,密码可能被其他用户看到
处理已存在文件的解压策略:
# 不覆盖已存在的文件
unzip -n archive.zip
# 强制覆盖已存在的文件,不询问
unzip -o archive.zip
# 默认行为:询问是否覆盖
unzip archive.zip
解压当前目录下所有ZIP文件:
# 批量解压所有ZIP文件
for file in *.zip; do
echo "解压: $file"
unzip "$file"
done
# 批量解压到各自目录
for file in *.zip; do
dirname="${file%.zip}"
mkdir -p "$dirname"
unzip "$file" -d "$dirname"
done
将所有文件解压到同一目录,忽略原始目录结构:
# 创建带目录结构的ZIP
mkdir -p dir/subdir
echo "file1" > dir/file1.txt
echo "file2" > dir/subdir/file2.txt
zip -r structured.zip dir/
# 忽略目录结构解压
unzip -j structured.zip
# 所有文件都会解压到当前目录,而不是dir/目录下
通过管道从标准输入解压ZIP文件:
# 从标准输入解压(某些版本支持)
cat archive.zip | funzip > extracted_file
# 或者使用unzip -p输出到标准输出
unzip -p archive.zip file1.txt > output.txt
# 解压远程ZIP文件
curl -s https://example.com/archive.zip | funzip > file.txt
解压包含非ASCII文件名(如中文)的ZIP文件:
# 对于包含中文文件名的ZIP文件
# 方法1:使用-O选项指定编码(某些版本支持)
unzip -O GBK archive.zip
# 方法2:使用环境变量指定编码
UNZIP="-O GBK"
export UNZIP
unzip archive.zip
# 方法3:使用7z工具(更好的兼容性)
# sudo apt install p7zip-full
7z x archive.zip
结合shell脚本创建自解压的ZIP文件:
#!/bin/sh
# 这是一个自解压脚本
echo "正在解压文件..."
# 这里是经过uuencode编码的ZIP文件内容
# 实际使用时需要替换为真实的编码数据
tail -n +$SCRIPT_LINES "$0" | unzip -q -
echo "解压完成!"
exit 0
# ZIP文件数据从这里开始(实际需要将ZIP文件编码后放在这里)
这通常发生在解压包含非ASCII文件名(如中文、日文)的ZIP文件时:
-O选项指定正确的编码:unzip -O GBK file.zipUNZIP="-O GBK"; export UNZIP7z x file.zip对于分卷ZIP文件(如.zip、.z01、.z02等):
unzip archive.zipzip -FF archive.zip --out fixed.zip 然后解压fixed.zipunzip支持多种ZIP压缩算法:
-q选项减少输出,节省资源unzip -p large.zip bigfile.bin | split -b 1G - bigfile_part.7z或pigz-t测试文件完整性| 工具 | 主要用途 | 优点 | 缺点 |
|---|---|---|---|
| unzip | 解压ZIP文件 | 专门处理ZIP格式,功能全面,广泛支持 | 仅支持ZIP格式,不能创建ZIP文件 |
| zip | 创建ZIP文件 | 与unzip配合使用,跨平台兼容 | 压缩率不如某些现代工具 |
| 7z | 多种格式压缩解压 | 支持多种格式,压缩率高 | 内存使用较多,某些发行版需单独安装 |
| tar + gzip | Linux标准归档压缩 | Linux原生支持,保留权限和链接 | Windows兼容性较差 |
| rar/unrar | RAR格式压缩解压 | 高压缩率,支持分卷和恢复记录 | 非自由软件(某些版本) |
unzip -v查看压缩文件详细信息,包括压缩率unzip -l archive.zip | grep -i "keyword"搜索特定文件unzip archive.zip && rm archive.zipunzip archive.zip "*/2023-*"unzip -qq完全静默模式,适合脚本中使用unzip -T archive.zipzip -F修复后再解压创建ZIP压缩文件的工具
7-Zip压缩工具,支持多种格式
Linux标准归档工具,常与gzip配合
unzip的一部分,用于从标准输入解压