手册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
为所需的压缩格式。gzip
xz
也可以通过 ssh 管道传输 tar 档案,这里不需要使用单个文件。
答案2
在ssh中,它允许gzip压缩(在scp下)。
这将加快缓慢连接上的速度;但是,在任何相当快的连接(100Mbit 或更快)上,压缩几乎肯定会减慢速度。
它的效率是高于还是低于 zip,取决于 gzip(特别是 gzip -6)是否比您在 zip 中选择的压缩级别更高或更低。