通过 SSH 使用 tar/gz 将目录压缩到本地计算机?

通过 SSH 使用 tar/gz 将目录压缩到本地计算机?

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

相关内容