前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >使用tar+pv 命令实现压缩和解压缩显示进度条

使用tar+pv 命令实现压缩和解压缩显示进度条

作者头像
IT小马哥
发布2024-08-15 13:59:29
发布2024-08-15 13:59:29
24300
代码可运行
举报
文章被收录于专栏:Java TaleJava Tale
运行总次数:0
代码可运行

实现该功能需要安装 pv,然后把需要处理的数据通过管道传给 pv,最后再进行操作。

传给 pv 的目的是为了知道已经处理的数据量大小,同时需要通过 -s 指定总共需要处理的数据量大小。

pv 的安装一般的软件管理工具都有提供:

安装pv

代码语言:javascript
代码运行次数:0
复制
$ sudo yum install pv

pv 的详细用法可参考:https://linux.die.net/man/1/pv

准备测试目录

准备一个测试压缩的目录test,里面放了连个文本文件1.txt和2.txt

代码语言:javascript
代码运行次数:0
复制
[root@localhost tar_pv]# ls test
1.txt  2.txt

压缩文件

代码语言:javascript
代码运行次数:0
复制
$ tar -cf - test | pv -s $(du -sk test | awk '{print $1}') | gzip > test.tar.gz

实际操作

代码语言:javascript
代码运行次数:0
复制
[root@localhost ~]# tar -cf - test | pv -s $(du -sk test | awk '{print $1}') | gzip > test.tar.gz
  10kiB 0:00:00 [ 256MiB/s] [================================================================================================] 85333%            
[root@localhost ~]# 
[root@localhost ~]# ll
total 21648
drwxr-xr-x 2 root root     4096 Nov  4 14:28 test
-rw-r--r-- 1 root root      173 Nov  4 15:48 test.tar.gz
[root@localhost ~]# tar -tvf test.tar.gz 
drwxr-xr-x root/root         0 2021-11-04 14:28 test/
-rw-r--r-- root/root         4 2021-11-04 14:13 test/1.txt
-rw-r--r-- root/root         5 2021-11-04 14:14 test/2.txt
[root@localhost ~]# 

命令详解:

tar -cf -f 是指定目标文件, - , 代表将需要压缩的数据输出到 stdout(标准输出),这样管道的后面才可以接收到需要处理的数据。

pv 命令的作用是,将输入复制一遍然后输出到 stdout,这样最后的 gzip 命令才有数据可以处理,最后通过 gzip 命令把前面的输出处理之后保存到 test.tar.gz。

pv -s 后面一串的命令是获取需要处理的所有数据的大小(单位:字节),mac 下 du -sk 获取到的数值是以 k 为单位的,而其他 *nix 系统则不一样,参数需要改为 du -sb,同时也不需要再乘以 1024。

解压缩

代码语言:javascript
代码运行次数:0
复制
$ pv test.tar.gz | tar -zxf -

实际操作

代码语言:javascript
代码运行次数:0
复制
[root@localhost ~]# pv test.tar.gz | tar -zxf -
 173 B 0:00:00 [   5MiB/s] [==================================================================================================>] 100%            
[root@localhost ~]# 

命令详解:通过 pv 读取需要解压的文件到 stdout,然后通过管道传递给 tar 命令,tar 命令从标准输入获取要处理的数据进行解压。

本文由 小马哥 创作,采用 知识共享署名4.0 国际许可协议进行许可

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装pv
  • 准备测试目录
  • 压缩文件
  • 解压缩
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档