Linux

帶有 -C 標誌的 scp 不執行壓縮

  • January 5, 2022

scp手冊頁顯示該標誌-C可用於在執行遠端複製時動態壓縮文件 -

$ man scp | grep "\-C"
    -C      Compression enable.  Passes the -C flag to ssh(1) to enable compression.

但是,當我scp使用和不使用標誌執行時,文件大小保持不變 -

沒有標誌:

$ scp root@remote-host:/path/to/file/* .
Password:
core_dump                                                                100% 7832MB 110.6MB/s   01:10

$ ls -lh
total 7.7G
-rw------- 1 user group 7.7G Jan  4 16:19 core_dump

使用壓縮標誌:

$ scp -C root@remote-host:/path/to/file/* .
Password:
core_dump                                                                100% 7832MB  69.8MB/s   01:52
$ ls -lh
total 7.7G
-rw------- 1 user group 7.7G Jan  4 16:21 core_dump

我嘗試了其他幾個選項,但都產生相同的結果:

$ scp -o Compression=yes root@remote-host:/path/to/file/* .

$ scp -C -o Compression=yes root@remote-host:/path/to/file/* .

$ scp -C -o Compression=yes -o CompressionLevel=9 root@remote-host:/path/to/file/* .

有什麼我在這裡想念的嗎?

ssh -C是對線路上動態數據的壓縮,而不是靜態數據。換句話說,ssh在傳輸層壓縮和解壓。

使用 ssh 和管道,可以在遠端主機上進行壓縮,將壓縮流作為標準輸入,然後在本地主機上寫出。它壓縮運動和靜止的數據。

ssh root@remote-host "zstd /path/to/file/core_dump --stdout" > core_dump.zst

引號很重要,表示遠端命令。替換zstdgzipxz為您想要的壓縮格式。

也可以通過 ssh 傳輸 tar 檔案,這裡不需要單個文件。

引用自:https://serverfault.com/questions/1089002