如何不解压zip压缩包即可获取包内所有文件的md5sum值
无需解压ZIP包获取内部文件MD5值的方法
单文件MD5计算
直接使用unzip自带的-p参数即可实现,无需在磁盘生成解压后的实体文件:
unzip -p 目标压缩包.zip 包内文件完整路径 | md5sum
参数说明:-p作用是将指定包内文件的内容直接输出到标准输出流,仅在内存完成数据读取,不会执行磁盘写入的解压操作
批量获取全部文件的MD5值
可以结合文件列表遍历实现批量计算:
- 先通过
unzip -Z1 目标压缩包.zip获取压缩包内所有文件的路径列表,该命令仅输出纯文件路径,无冗余信息 - 遍历列表逐一生成MD5,可直接使用如下Shell脚本:
# 替换为你的压缩包实际路径 ZIP_FILE="example.zip" unzip -Z1 "$ZIP_FILE" | while read -r INNER_FILE; do # 计算单个文件MD5并过滤掉md5sum输出的后缀符号 FILE_MD5=$(unzip -p "$ZIP_FILE" "$INNER_FILE" | md5sum | awk '{print $1}') echo "$FILE_MD5 $INNER_FILE" done
其他可选方案
如果本地安装了7z工具,也可以用7z的标准输出参数实现相同效果:
# 单文件计算 7z x -so 目标压缩包.zip 包内文件完整路径 | md5sum
注意:以上所有方案均是将文件内容读取到内存中计算哈希,不会在磁盘生成解压后的文件,完全符合不执行实际解压操作的需求,适合大体积压缩包或者磁盘空间不足的场景使用。
内容的提问来源于stack exchange,提问作者arunkumar A
相关产品推荐
相关产品推荐

