![通过 SSH 使用 tar/gz 将目录压缩到本地计算机?](https://linux22.com/image/17627/%E9%80%9A%E8%BF%87%20SSH%20%E4%BD%BF%E7%94%A8%20tar%2Fgz%20%E5%B0%86%E7%9B%AE%E5%BD%95%E5%8E%8B%E7%BC%A9%E5%88%B0%E6%9C%AC%E5%9C%B0%E8%AE%A1%E7%AE%97%E6%9C%BA%EF%BC%9F.png)
我基本上想 tar/gz 远程计算机上的目录并将文件保存到本地计算机,而无需从远程计算机连接回本地计算机。有没有办法通过 SSH 来做到这一点? tar 文件不需要存储在远程计算机上,只需存储在本地计算机上即可。这可能吗?
答案1
您可以使用 ssh 命令来完成此操作,只需告诉tar
在其标准输出上创建存档即可:
ssh remote.example.com 'cd /path/to/directory && tar -cf - foo | gzip -9' >foo.tgz
另一种方法是挂载远程计算机的文件系统,如果您想在另一台计算机上进行大量文件操作,但对于一次性存档创建来说就太过分了,这种方法会更方便SSHFS(A保险丝文件系统)。您应该在 SSH 级别启用压缩。
mkdir ~/net/remote.example.com
sshfs -C remote.example.com:/ ~/net/remote.example.com
tar -czf foo.tgz -C ~/net/remote.example.com/path/to/directory foo
答案2
使用此命令复制到远程目标:
tar -c --zstd <src files> | ssh user@target_host "cd target_dir && tar -x --zstd"
焦油标志:
-c:创建新的 tar 输出(默认为 stdout)
--zstd:使用 zstd 压缩(比 tar 的算法 gzip 更快)
-x:提取输出(默认为标准输入)
测量线路速率以进行基准测试:
tar -c --zstd <src files> | pv --timer --rate | ssh user@target_host "cd target_dir && tar -x --zstd"
压缩基准
环境:笔记本电脑和台式机之间的本地 wifi(限制为 ~40MiB/s)
压缩:0:04:59
时间:0:03:04
答案3
对于通过仅为传输而压缩目录或文件来复制目录或文件的简单方法:
$ ssh domain.net 'ls foo'
file1 file2
$ ssh domain.net 'tar czf - foo' | tar xz
$ ls foo
file1 file2