我基本上想 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