显示实时压缩比的压缩程序

显示实时压缩比的压缩程序

某些压缩程序可以在执行任务时显示信息(例如压缩比或时间和大小总计),例如xz -v

--- % 2,580.2 KiB / 6,552.0 KiB =0.394   1.2 MiB/秒 0:05

在压缩大文件时,我想知道任务中的压缩率,以便在压缩率较低时停止该过程并保持其未压缩状态。

还有其他程序有这个功能吗? (xz压缩比高但速度慢)

答案1

执行此操作的通用方法是使用类似pv监视压缩程序的输入和输出大小的方法。例如 :

$ pv -cpterba -N in /dev/urandom | gzip | pv -cpterba -N out > /dev/null 
      out:  956MiB 0:00:42 [23.1MiB/s] [22.8MiB/s] [                           <=>        ]
       in:  956MiB 0:00:42 [23.1MiB/s] [22.8MiB/s] [                           <=>        ]

从上面很容易看出,输出大小与输入大小相同 - 正如尝试压缩随机数据时所预期的那样。

如果我们尝试使用压缩效果非常好的文件:

$ pv -cpterba -N in /dev/zero | gzip | pv -cpterba -N out > /dev/null 
      out: 2.62MiB 0:00:25 [ 109KiB/s] [ 107KiB/s] [                   <=>                ]
       in: 2.65GiB 0:00:25 [ 110MiB/s] [ 108MiB/s] [                   <=>                ]

输出大小为 2.62MiB,输入大小为 2.65GiB,大了 3 个数量级。

作为一个附带好处,如果在普通文件上使用,pv将为您提供预计到达时间:

$ pv -cpterba -N in debian-8.2.0-amd64-DVD-1.iso | gzip | pv -cpterba -N out > /dev/null 
      out:  578MiB 0:00:27 [22.1MiB/s] [21.4MiB/s] [                  <=>                 ]
       in:  595MiB 0:00:27 [22.1MiB/s] [  22MiB/s] [==>                   ] 15% ETA 0:02:25

Jessie DVD映像大部分是压缩文件,因此压缩效果不是很好,但还需要两分半钟才能完成。

您还可以用来pv -d监视已经运行的进程 - 如果您将其应用于正在运行的压缩器,它会告诉您它在输入文件与输出文件中的位置,再次让您快速查看比率:

$ pv -pterba -d "$(pidof gzip)"
   3:/var/tmp/mp3s.tar:  911MiB 0:00:44 [  20MiB/s] [19.9MiB/s] [>         ]  9% ETA 0:07:35
   4:/var/tmp/mp3s.tar.gz:  906MiB 0:00:44 [  20MiB/s] [19.8MiB/s] [                <=>   ] 

MP3 的 Tar 文件也不能很好地压缩。

笔记:许多压缩机都是逐块工作的。这就是为什么您可能会看到传输速率飙升然后变为 0 之类的情况,重复这一过程。您需要让压缩机运行一段时间,然后才能真正了解预期的比率。请记住,在峰值之后,可能会在一个块中读取它,但尚未写入压缩版本 - 但如果您已经等待了 10 个块,则最多有 10% 的错误。

(我使用的 pv 选项:-p打开进度条;-t打开已用时间;-e打开 ETA;-r显示传输速率;-b打开字节计数器;-c使pv管道中的多个 s 工作;-N设置标签)。

相关内容