Compression
時間自適應壓縮工具
我在詢問將大文件複製到遠端伺服器的場景。
一個最簡單的情況是:
tar c myfile | ssh myserver tar x
如果網路連接速度很快,那麼一切都很好。
在較慢的網路上,我這樣做
tar c myfile | bzip2 -1 | ssh myserver tar xj
– 以 CPU 時間為代價使我的傳輸更快。
當然,我可以使用壓縮比,通常會嘗試猜測正確的壓縮比,這樣我的 CPU 就不會太忙並且網路已經飽和。
是否有壓縮實用程序或壓縮標誌會告訴
bzip2
/xz
/…在輸出緩衝區繁忙時盡可能地壓縮?
zstd --adapt
zstd
壓縮實用程序有一個打開自適應壓縮的選項(該選項是在 v1.3.6 中添加的)zstd
。這會將壓縮調整為“目前感知的 I/O 條件”。有關詳細資訊,請參閱
zstd
手冊。一個完整的管道可能看起來像這樣:
tar -c -f - source_directory | zstd --adapt | ssh user@server 'cd /someplace && { zstd -d | tar -x -f -;}'
或者
tar -c -f - source_directory | zstd --adapt | ssh user@server 'zstd -d | tar -x -C /someplace -f -'
如果你添加
-v
到zstd
管道中的第一個,你會得到一個進度指示器行,上面寫著類似(L7) Buffered : 32 MB - Consumed : 192 MB - Compressed : 72 MB => 37.50%
其中
(L7)
表示壓縮級別。對於任何中等數量的數據,您會期望它會隨著時間的推移而波動,這表明它zstd
確實適應了 I/O 條件(並且可能也適應了數據本身)。