You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 15:17:37