我正在詢問將大文件複製到遠端伺服器的場景。
一個最簡單的情況是:
tar c myfile | ssh myserver tar x
如果網路連線速度很快,那麼一切都很好。
在較慢的網路上我這樣做
tar c myfile | bzip2 -1 | ssh myserver tar xj
-- 以 CPU 時間為代價提高傳輸速度。
當然,我可以使用壓縮比,通常會嘗試猜測正確的壓縮比,這樣我的 CPU 就不會太忙,網路也不會飽和。
是否有壓縮實用程式或壓縮標誌可以告訴bzip2
/ xz
/...在輸出緩衝區繁忙時盡可能多地壓縮?
答案1
zstd --adapt
這zstd
壓縮實用程式有一個打開自適應壓縮的選項(該選項是在zstd
v1.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 條件(並且可能也適應數據本身)。