Ssh

將文件夾存檔到伺服器上,在主機上壓縮

  • December 13, 2021

我嘗試執行以下操作:

  1. 將文件夾(比如Pictures)上傳到伺服器
  2. 讓伺服器壓縮輸入流並保存到文件

重要的是,步驟 1) 應該是未壓縮的,因為連接速度非常快,我認為客戶端的壓縮會更慢。此外,伺服器沒有足夠的空間來儲存未經壓縮的目錄。理想情況下,伺服器上的壓縮同時發生。

只要它是多執行緒的,我就不太關心實際的壓縮算法。

初步說明:假設您的圖片已經壓縮(JPEG,PNG,WEBP,…),無論您使用什麼壓縮,都沒有什麼可以做的,空間方面。根本沒有熵可以減少了。所以,你的整個計劃在這裡可能會失敗。

一種常用的方法是使用Tape ARchive格式 (.tar)。您可以將目錄序列化為單個 TAR 流,通過 Internet 將其通過管道傳輸(例如使用 SSH)並在目標上壓縮它。

您還想關閉 SSH 的內置傳輸壓縮,否則一開始就在發送主機上不壓縮是沒有意義的。

就像是

tar c Pictures/ | ssh -o "Compression=no" user@server "zstd -15 -T0 > Pictures.tar.zstd"

替換zstd -T0(使用盡可能多的 CPU 核心,用於 zstandard 壓縮;這-15是壓縮級別;15 相當殘酷,-3比 gzip 更好,但通常更快)為xz -T0(用於並行 XZip 壓縮)或pigz(用於並行 gzip 壓縮)為你覺得合適。我推薦 zstd,它具有非常好的壓縮比/速度折衷;xz速度很慢,而且 gzip 只能產生非常有限的壓縮,並且在相對較低的壓縮設置下並不比 zstd 快。

但是請注意,數據加密可能需要比壓縮更多的 CPU,所以問題是為什麼你不只是

zstd -r --stdout Pictures/ | ssh -o "Compression=no" user@server "cat > Pictures.zst"

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