Compression

估計文件的可壓縮性

  • September 1, 2020

是否有一種快速而骯髒的方法來估計gzip文件的 -compressibility 而不必完全壓縮它gzip

我可以,在bash,做

bc <<<"scale=2;$(gzip -c file | wc -c)/$(wc -c <file)"

這給了我壓縮因子,而無需將gz文件寫入磁碟;gz這樣,如果節省的磁碟空間不能證明麻煩,我可以避免用它的版本替換磁碟上的文件。但是通過這種方法,文件確實完全通過gzip;只是輸出通過管道傳輸wc而不是寫入磁碟。

有沒有辦法在不gzip處理所有內容的情況下對文件進行粗略的可壓縮性估計?

例如,您可以嘗試每 10 個塊壓縮一個塊來獲得一個想法:

perl -MIPC::Open2 -nE 'BEGIN{$/=\4096;open2(\*I,\*O,"gzip|wc -c")}
                      if ($. % 10 == 1) {print O $_; $l+=length}
                      END{close O; $c = <I>; say $c/$l}'

(這裡有 4K 塊)。

這是Stephane Chazelas 解決方案的(希望是等效的)Python 版本

python -c "
import zlib
from itertools import islice
from functools import partial
import sys
with open(sys.argv[1], "rb") as f:
 compressor = zlib.compressobj()
 t, z = 0, 0.0
 for chunk in islice(iter(partial(f.read, 4096), b''), 0, None, 10):
   t += len(chunk)
   z += len(compressor.compress(chunk))
 z += len(compressor.flush())
 print(z/t)
" file

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