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%

 

GitHub 加速计划 / li / linux-dash
13
2
下载
A beautiful web dashboard for Linux
最近提交(Master分支:4 个月前 )
186a802e added ecosystem file for PM2 5 年前
5def40a3 Add host customization support for the NodeJS version 5 年前
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐