tar 命令顯示進度條


實現該功能需要安裝 pv,然后把需要處理的數據通過管道傳給 pv,最后再進行操作。

傳給 pv 的目的是為了知道已經處理的數據量大小,同時需要通過 -s 指定總共需要處理的數據量大小。

 

pv 的安裝一般的軟件管理工具都有提供:

如 centos 下 yum install pv

ubuntu : apt-get install pv

mac:brew install pv

pv 的詳細用法可參考:https://linux.die.net/man/1/pv

 

壓縮:

mac:

tar -cf - questions.sql | pv -s $(($(du -sk questions.sql | awk '{print $1}') * 1024)) | gzip > question.tar.gz

  

其他系統(ubuntu、centos ...):

tar -cf - questions.sql | pv -s $(du -sk questions.sql | awk '{print $1}') | gzip > question.tar.gz

 

該命令將 questions.sql 壓縮到 question.tar.gz。

命令詳解:

tar -cf 我們知道 -f 是指定目標文件,這里 -f 后面是 - , 代表將需要壓縮的數據輸出到 stdout(標准輸出),這樣管道的后面才可以接收到需要處理的數據。

pv 命令的作用是,將輸入復制一遍然后輸出到 stdout,這樣最后的 gzip 命令才有數據可以處理,最后通過 gzip 命令把前面的輸出處理之后保存到 question.tar.gz。

pv -s 后面一串的命令是獲取需要處理的所有數據的大小(單位:字節),mac 下 du -sk 獲取到的數值是以 k 為單位的,而其他 *nix 系統則不一樣,參數需要改為 du -sb,同時也不需要再乘以 1024。

 

 

解壓:

pv question.tar.gz | tar -zxf -

  

解壓命令沒那么多參數,因為需要解壓的文件大小已經確定,不需要我們手動計算一遍。

上面的命令通過 pv 讀取需要解壓的文件到 stdout,然后通過管道傳遞給 tar 命令,tar 命令從標准輸入獲取要處理的數據進行解壓。

 

 

附 tar 壓縮顯示進度小腳本: 

#!/bin/bash

if [[ $1 = '' ]]; then
    echo "參數缺失,用法 'tarpv 文件名/目錄名'"
    exit 1
fi

tar -cf - "$1" | pv -s $(($(du -sk "$1" | awk '{print $1}') * 1024)) | gzip > $1.tar.gz

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM