赞
踩
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%
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。