Linux下如何获取压缩包内文件或嵌套压缩包的未压缩大小?
不解压计算嵌套压缩包的未压缩大小
一、递归计算bootcd.tar.gz解压后的总大小
通过嵌套解析所有层级的压缩文件,累加所有内容的未压缩大小,可执行以下脚本:
total=0 # 遍历顶层归档的所有条目 tar -tzf bootcd.tar.gz | while read -r entry; do # 跳过目录,只处理文件 if [[ "$entry" != */ ]]; then if [[ "$entry" =~ \.tar\.gz$ ]]; then # 提取嵌套tar.gz并计算其内部总大小 size=$(tar -xOf bootcd.tar.gz "$entry" | tar -tzf - | awk '{sum += $3} END {print sum}') total=$((total + size)) elif [[ "$entry" == *initrd.img ]]; then # 处理initrd.img(默认按gzip+cpio格式解析,可根据实际调整压缩格式) size=$(tar -xOf bootcd.tar.gz "$entry" | gunzip -c 2>/dev/null | cpio -tv 2>/dev/null | awk '{sum += $3} END {print sum}') total=$((total + size)) else # 普通文件直接取tar列出的未压缩大小 size=$(tar -tzf bootcd.tar.gz "$entry" | awk '{print $3}') total=$((total + size)) fi fi done echo "递归解压总大小:$total 字节"
说明
- 脚本自动跳过目录,仅计算文件的未压缩大小
- 若你的initrd.img是xz压缩格式,将
gunzip -c替换为unxz -c;若未压缩则直接去掉压缩解压步骤 - 若存在其他嵌套压缩格式(如.tar.xz),可新增对应的判断分支处理
二、计算单个嵌套文件的未压缩大小
示例1:计算initrd.img的未压缩大小
tar -xOf bootcd.tar.gz initrd.img | gunzip -c | cpio -tv 2>/dev/null | awk '{sum += $3} END {print "initrd.img未压缩总大小:" sum " 字节"}'
示例2:计算嵌套tar.gz文件的未压缩大小
假设归档内有subdir/inner.tar.gz,要计算其内部总大小:
tar -xOf bootcd.tar.gz subdir/inner.tar.gz | tar -tzf - | awk '{sum += $3} END {print "inner.tar.gz未压缩总大小:" sum " 字节"}'
内容的提问来源于stack exchange,提问作者GuruRandapa
相关产品推荐
相关产品推荐

