当前位置:   article > 正文

Linux:tar 命令显示进度条_tar 进度

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
  

  • 1
  • 2
  • 3

其他系统(ubuntu、centos …):

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

该命令将 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 -
  • 1

解压命令没那么多参数,因为需要解压的文件大小已经确定,不需要我们手动计算一遍。

上面的命令通过 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/334985
推荐阅读
相关标签
  

闽ICP备14008679号