linux xz gz tar 获取解压进度条

1. 想要获取进度,必须知道解压之后总文件的大小

2.下面来获取linux中常用的两种压缩方式,查看解压之后的文件大小

 (1)  tar.xz

   examples.tar.xz     

$xz --robot -l  examples.tar.xz
name    examples.tar.xz
file    1       157     646599460       1966622720      0.329   CRC32   0
totals  1       157     646599460       1966622720      0.329   CRC32   0       1

   646599460  这个是当前压缩文件的大小.1966622720这个解压之后文件大小,我们记为total_size.待会需要用到这个值.

 (2)tar.gz

  examples.tar.gz

$gzip -l examples.tar.gz
         compressed        uncompressed  ratio uncompressed_name
              77736              266240  70.8% examples.tar.gz

   77736    压缩文件大小, 266240 解压之后大小,我们记为 total_size.

3. tar 选项

  (1)   -b, --blocking-factor BLOCKS 

                  BLOCKS x 512 bytes per record

                 这个用于计算一个记录块是大小.是512的倍数

  (2)--checkpoint
           display progress messages every NUMBERth record (default 10)

    这个用进度条显示信息,检测数据点的位置,是record为单位

  (3)--checkpoint-action=ACTION
           execute ACTION on each checkpoint

   这个是每个checkpoint,可以自定义输出你想的信息

4. -b  --checkpoint 参数如何设置

 -b 进度条一般为100%显示.那么计算公式为:(total_size/512)/100+1 = 这个值就是一个record的大小.

  (除512是因为,以512为单位,除100是因为是百分制,即100%进度条,加1是因为小于512的补偿,以防出大于100%的进度)

  --checkpoint 设置为1即可,因为为了方便,所以也不用设置record的倍数了.仔细一想都能理解.

5.附上一个简易脚本

$cat unpack_progress.sh

#!/bin/sh

total_size=`xz --robot -l $1 | grep 'totals' | awk '{print $5}'`

echo "total_size:$total_size"

block_size=`expr $total_size / 51200`
block_size=`expr $block_size + 1`

tar --blocking-factor=$block_size --checkpoint=1 --checkpoint-action='ttyout=unpack %u%    \r' -xvf $1 -C $2

显示效果:
$ ./unpack_progress.sh rootfs.tar.xz ./rootfs > /dev/null
unpack 59%

 

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值