tar 命令顯示進度條

實現該功能須要安裝 pv,而後把須要處理的數據經過管道傳給 pv,最後再進行操做。linux

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

 

pv 的安裝通常的軟件管理工具都有提供:ubuntu

如 centos 下 yum install pvcentos

ubuntu : apt-get install pvbash

mac:brew install pv工具

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

 

壓縮:

mac:blog

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

  

其餘系統(ubuntu、centos ...):ip

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

 

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

命令詳解:

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
相關文章
相關標籤/搜索