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
    

      

  • 相关阅读:
    线程中常见的方法
    停止线程方式
    线程间的通信_多生产者多消费者问题_JDK1.5新特性_Lock
    1-为什么java的main方法必须是静态的
    45-机器设计问题(深搜)
    44-最大差值三角形
    23-吝啬的国度(vector+深搜)
    43-八数码
    41-安排车辆
    41-邮差送信(dfs)
  • 原文地址:https://www.cnblogs.com/eleven24/p/9134542.html
Copyright © 2011-2022 走看看