Performance

顯示實時壓縮比的壓縮程序

  • May 9, 2017

一些壓縮程序可以在執行任務時顯示資訊(如壓縮率或時間和總大小),例如xz -v

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

在壓縮大文件時,我想知道任務中的壓縮率,以便在壓縮率低時停止該過程並使其保持未壓縮狀態。

是否還有其他具有此功能的程序?(xz壓縮比高但速度慢)

執行此操作的通用方法是使用類似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將為您提供 ETA:

$ 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設置標籤)。

引用自:https://unix.stackexchange.com/questions/363951