带有 -C 标志的 scp 不执行压缩

带有 -C 标志的 scp 不执行压缩

手册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/* .

这里我遗漏了什么吗?

答案1

ssh -C是针对网络上传输的数据进行压缩,而不是针对静止的数据进行压缩。换句话说,ssh 在传输层进行压缩和解压缩。

使用 ssh 和管道,可以在远程主机上进行压缩,将压缩流作为标准输入,并将其写出到本地主机。这会压缩移动和静止的数据。

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

引号很重要,表示远程命令。请将或替换zstd为所需的压缩格式。gzipxz

也可以通过 ssh 管道传输 tar 档案,这里不需要使用单个文件。

答案2

在ssh中,它允许gzip压缩(在scp下)。

这将加快缓慢连接上的速度;但是,在任何相当快的连接(100Mbit 或更快)上,压缩几乎肯定会减慢速度。

它的效率是高于还是低于 zip,取决于 gzip(特别是 gzip -6)是否比您在 zip 中选择的压缩级别更高或更低。

相关内容