Linux zipinfo命令

简介

zipinfo命令是Linux系统中用于查看ZIP格式压缩文件详细信息的命令行工具。它可以显示ZIP文件中的文件列表、压缩率、加密状态、文件权限、时间戳等详细信息,比unzip -l命令提供的信息更加全面。

特点:zipinfo提供的信息格式类似于ls -l命令的输出,可以显示文件权限、所有者、大小、压缩率等详细信息,并支持多种输出格式选项。

语法格式

zipinfo [选项] 压缩文件[.zip] [文件...]

常用选项

选项 说明
-1 只显示文件名,每行一个文件
-2 显示文件名和文件大小
-h 显示头部信息(文件名、大小、文件数等)
-l 显示长格式信息(类似于ls -l
-m 显示中格式信息(文件名、大小、日期)
-s 显示短格式信息(默认格式)
-t 显示总计信息(文件数、总大小等)
-v 显示详细信息(包括CRC校验、压缩方法等)
-z 显示ZIP文件的注释信息
-T 以时间戳格式显示日期和时间
-M 分页显示输出,类似more命令
-C 不区分大小写匹配文件名
-x 模式 排除匹配指定模式的文件
-i 模式 只显示匹配指定模式的文件
-r 递归处理子目录(某些版本支持)
-H 不显示头部信息
-L 将文件名转换为小写
-U 将文件名转换为大写

输出格式说明

zipinfo命令的输出格式示例:

Archive:  example.zip
Zip file size: 12345 bytes, number of entries: 10
-rw-r--r--  2.3 unx     4560 tx defN 21-Jan-01 12:34 file1.txt
drwxr-xr-x  2.3 unx        0 bx stor 21-Jan-01 12:34 directory/
-rw-r--r--  2.3 unx     7890 tx defN 21-Jan-01 12:34 directory/file2.txt
字段 说明 示例
权限 Unix文件权限表示 -rw-r--r--
版本 ZIP规范版本 2.3
系统 创建文件的操作系统:unx=Unix, win=Windows, mac=Mac unx
文件类型 tx=文本文件, bx=二进制文件, di=目录 tx
压缩方法 stor=不压缩, def=Deflate, bz2=BZIP2, lzma=LZMA defN
日期时间 文件的最后修改日期和时间 21-Jan-01 12:34
文件名 ZIP中的文件或目录名 file1.txt

安装方法

zipinfo通常作为unzip包的一部分安装。如果系统中没有zipinfo命令,可以安装unzip包:

Debian/Ubuntu系统:
sudo apt update
sudo apt install unzip
RHEL/CentOS/Fedora系统:
sudo yum install unzip

# 或使用dnf(Fedora/RHEL8+)
sudo dnf install unzip
Arch Linux系统:
sudo pacman -S unzip
注意:在某些Linux发行版中,zipinfo可能是一个独立的包。如果安装unzip后仍没有zipinfo,可以尝试安装zipinfo包。

使用示例

示例1:显示ZIP文件基本信息

显示ZIP文件的基本信息:

# 创建测试ZIP文件
echo "Test file 1" > file1.txt
echo "Test file 2" > file2.txt
zip example.zip file1.txt file2.txt

# 显示ZIP文件基本信息
zipinfo example.zip

# 输出示例:
# Archive:  example.zip
# Zip file size: 567 bytes, number of entries: 2
# -rw-r--r--  2.3 unx       12 tx defN 23-Dec-15 10:30 file1.txt
# -rw-r--r--  2.3 unx       12 tx defN 23-Dec-15 10:30 file2.txt
# 2 files, 24 bytes uncompressed, 24 bytes compressed:  0.0%
示例2:只显示文件名

使用-1选项只显示文件名:

# 只显示文件名,每行一个
zipinfo -1 example.zip

# 输出:
# file1.txt
# file2.txt
示例3:显示详细的长格式信息

使用-l选项显示长格式信息:

# 显示长格式信息(类似于ls -l)
zipinfo -l example.zip

# 显示更详细的信息(包括CRC等)
zipinfo -v example.zip
示例4:显示特定文件信息

查看ZIP文件中特定文件的信息:

# 查看特定文件
zipinfo example.zip file1.txt

# 使用通配符匹配多个文件
zipinfo example.zip "*.txt"

# 排除特定文件
zipinfo example.zip -x "file2.txt"
示例5:显示ZIP文件注释

查看ZIP文件的注释信息:

# 创建带注释的ZIP文件
zip -z example.zip
# 提示输入注释

# 显示ZIP文件注释
zipinfo -z example.zip
示例6:统计信息

显示ZIP文件的统计信息:

# 显示总计信息
zipinfo -t example.zip

# 输出示例:
# 2 files, 24 bytes uncompressed, 24 bytes compressed:  0.0%

# 显示头部和总计信息
zipinfo -ht example.zip
示例7:分页显示

对于包含大量文件的ZIP文件,使用分页显示:

# 创建包含多个文件的ZIP
for i in {1..100}; do echo "File $i" > "file$i.txt"; done
zip large.zip file*.txt

# 分页显示
zipinfo -M large.zip

# 按空格键翻页,按q键退出
示例8:文件过滤

使用模式匹配过滤文件:

# 创建包含多种类型文件的ZIP
echo "text" > doc1.txt
echo "text" > doc2.txt
echo "data" > data1.csv
echo "data" > data2.csv
zip mixed.zip *.txt *.csv

# 只显示txt文件
zipinfo -i "*.txt" mixed.zip

# 排除csv文件
zipinfo -x "*.csv" mixed.zip

高级用法

1. 结合其他命令进行文件分析
# 统计ZIP文件中不同类型的文件数量
zipinfo -1 archive.zip | awk -F. '{print $NF}' | sort | uniq -c | sort -rn

# 找出ZIP中最大的文件
zipinfo -v archive.zip | grep -A1 "compressed size" | grep -v "compressed size" | sort -rn | head -5

# 检查ZIP文件中是否有加密文件
zipinfo archive.zip | grep -i "encrypted"

# 计算ZIP文件的平均压缩率
zipinfo -t archive.zip | awk '{print $(NF-1)}' | tr -d '%'
2. 批量处理多个ZIP文件
# 批量查看多个ZIP文件的信息
for zipfile in *.zip; do
    echo "=== $zipfile ==="
    zipinfo -t "$zipfile"
done

# 批量提取ZIP文件中的特定类型文件
for zipfile in *.zip; do
    echo "从 $zipfile 中提取PDF文件..."
    zipinfo -1 "$zipfile" | grep -i "\.pdf$" | xargs -I {} unzip "$zipfile" "{}"
done
3. 创建ZIP文件报告
#!/bin/bash
# 创建ZIP文件详细报告
REPORT_FILE="zip_report_$(date +%Y%m%d).txt"

echo "ZIP文件分析报告 - $(date)" > "$REPORT_FILE"
echo "=====================================" >> "$REPORT_FILE"

for zipfile in *.zip; do
    echo "文件: $zipfile" >> "$REPORT_FILE"
    echo "大小: $(du -h "$zipfile" | cut -f1)" >> "$REPORT_FILE"
    echo "MD5: $(md5sum "$zipfile" | cut -d' ' -f1)" >> "$REPORT_FILE"
    echo "内容:" >> "$REPORT_FILE"
    zipinfo -1 "$zipfile" | sed 's/^/  /' >> "$REPORT_FILE"
    echo "" >> "$REPORT_FILE"
done

echo "报告已生成: $REPORT_FILE"
4. 比较两个ZIP文件的内容
# 比较两个ZIP文件的内容差异
diff <(zipinfo -1 archive1.zip | sort) <(zipinfo -1 archive2.zip | sort)

# 比较文件大小和日期
zipinfo -l archive1.zip | awk '{print $9, $6, $7, $8}' > filelist1.txt
zipinfo -l archive2.zip | awk '{print $9, $6, $7, $8}' > filelist2.txt
diff filelist1.txt filelist2.txt

zipinfo与unzip -l对比

功能 zipinfo unzip -l
显示文件权限 支持(详细格式) 不支持
显示压缩方法 支持 不支持
显示操作系统信息 支持 不支持
显示CRC校验值 支持(详细模式) 不支持
文件过滤(-i, -x) 支持 不支持
多种输出格式 支持(-1, -2, -s, -m, -l) 单一格式
显示ZIP注释 支持(-z) 不支持
分页显示 支持(-M) 不支持
安装需求 需要unzip包 需要unzip包

常见问题

  • zipinfo:提供更详细的信息,包括文件权限、压缩方法、操作系统信息、CRC值等,支持多种输出格式和过滤选项
  • unzip -l:提供基本的文件列表,格式简单,信息较少
  • 如果需要详细分析ZIP文件内容,使用zipinfo;如果只需简单的文件列表,使用unzip -l

使用zipinfo的详细模式查看:

# 查看是否有加密文件
zipinfo -v encrypted.zip | grep -i "encryption"

# 或者使用长格式查看,加密文件会有特殊标记
zipinfo -l encrypted.zip | grep -i "encrypted"

这些标记表示创建ZIP文件的操作系统:

  • unx:Unix/Linux系统创建的文件
  • win:Windows系统创建的文件
  • mac:macOS系统创建的文件
  • 其他:可能还有其他的系统标识

使用-t选项查看总计信息,其中包含压缩率:

# 查看总体压缩率
zipinfo -t archive.zip

# 查看每个文件的压缩率(详细模式)
zipinfo -v archive.zip | grep -A2 "compressed size"

zipinfo只能查看ZIP格式的文件。对于其他格式,可以使用相应的工具:

  • .tar.gz/.tgztar -tzf file.tar.gz
  • .tar.bz2tar -tjf file.tar.bz2
  • .rarunrar l file.rar
  • .7z7z l file.7z
  • .zipzipinfo file.zipunzip -l file.zip

实用技巧

  • 使用zipinfo -1获取文件列表,便于脚本处理
  • 结合grep命令查找特定类型的文件:zipinfo -1 archive.zip | grep "\.jpg$"
  • 使用-T选项将日期转换为时间戳,便于程序处理
  • 对于大型ZIP文件,使用-M选项分页查看,避免输出过长
  • 使用-i-x选项过滤文件,只查看需要的文件
  • 检查ZIP文件是否损坏:zipinfo -t archive.zip,如果正常会显示统计信息
  • 比较两个ZIP文件的差异:diff <(zipinfo -1 file1.zip | sort) <(zipinfo -1 file2.zip | sort)
  • 创建ZIP文件内容清单:zipinfo -1 archive.zip > filelist.txt

相关命令

unzip

解压ZIP文件的工具,也有基本列表功能

zip

创建ZIP压缩文件的工具

zipdetails

显示ZIP文件内部结构的详细信息

zipnote

编辑ZIP文件注释的工具