時間自適應壓縮工具

時間自適應壓縮工具

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

一個最簡單的情況是:

tar c myfile | ssh myserver tar x

如果網路連線速度很快,那麼一切都很好。

在較慢的網路上我這樣做

tar c myfile | bzip2 -1 | ssh myserver tar xj

-- 以 CPU 時間為代價提高傳輸速度。

當然,我可以使用壓縮比,通常會嘗試猜測正確的壓縮比,這樣我的 CPU 就不會太忙,網路也不會飽和。

是否有壓縮實用程式或壓縮標誌可以告訴bzip2/ xz/...在輸出緩衝區繁忙時盡可能多地壓縮?

答案1

zstd --adapt

zstd壓縮實用程式有一個打開自適應壓縮的選項(該選項是在zstdv1.3.6 中添加的)。這會將壓縮調整為「目前感知的 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 條件(並且可能也適應數據本身)。

相關內容