Compression

時間自適應壓縮工具

  • June 7, 2019

我在詢問將大文件複製到遠端伺服器的場景。

一個最簡單的情況是:

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 -'

如果你添加-vzstd管道中的第一個,你會得到一個進度指示器行,上面寫著類似

(L7) Buffered :  32 MB - Consumed : 192 MB - Compressed :  72 MB => 37.50%

其中(L7)表示壓縮級別。對於任何中等數量的數據,您會期望它會隨著時間的推移而波動,這表明它zstd確實適應了 I/O 條件(並且可能也適應了數據本身)。

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