Performance
顯示實時壓縮比的壓縮程序
一些壓縮程序可以在執行任務時顯示資訊(如壓縮率或時間和總大小),例如
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
設置標籤)。