zoukankan      html  css  js  c++  java
  • 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
    

      

  • 相关阅读:
    2017.10.27
    2017.10.26
    codeforces 652 E Pursuit For Artifacts
    bzoj 1123 BLO
    bzoj 2839 集合计数
    bzoj 3170: [Tjoi 2013]松鼠聚会
    bzoj 2503 相框 欧拉回路
    bzoj 1786 [Ahoi2008]Pair 配对
    bzoj 1014 [JSOI2008]火星人prefix 哈希+splay
    csp-s74 瓶颈
  • 原文地址:https://www.cnblogs.com/eleven24/p/9134542.html
Copyright © 2011-2022 走看看