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
相关文章
相关标签/搜索