linux xz gz tar 獲取解壓進度條

2021-09-13 20:08:26 字數 2133 閱讀 2825

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 ''`

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%

orzdba 監控獲取 輸出全解 原理系列

orzdba好用的不要不要的 threads threads run con cre cac 0 0 0 0 200 202 0 0 201 202 0 0 201 202 0 0 201 202 0 0 innodb hit hit lor hit 0 100.00 385098 98.00 39...

解耦,獲取jar包中的資料

需求 獲取自定義jar包中某個方法的執行日誌資訊 需要打包的jar中 定義介面,日誌記錄 author version 1.0 description 日誌記錄 date 2021 2 28 16 12 public inte ce logrecord外部要呼叫的方法 author version ...

Struts使用用解耦合的方式獲取Session

constant name struts.devmode value true 在servlet中可以通過 servlet api 來獲取session 在struts中如何獲取 session呢?解析 將使用者名稱放入session 兩種方案 1.與 servlet api 解耦的訪問方式 01....