如何通过 tar 管道 scp/ssh 文件传输(拉)(从本地计算机发起的远程->本地传输)

如何通过 tar 管道 scp/ssh 文件传输(拉)(从本地计算机发起的远程->本地传输)

我想通过 tar 进行 scp pull 操作(下面没有 tar 的示例),这样大约 10 个目录只写入一个 tar 文件:

user@localhost:/home/user> scp -r remoteuser@remotehost:dir_to_transfer ./

我在远程计算机上有目录,每个目录有大约 10,000 个小(~28k)文件要传输。由于文件配额,我没有太多可用空间来在远程主机(remotehost)上运行 tar 命令。由于防火墙规则,我只能从本地计算机(localhost)发起传输。

文件数量庞大,导致传输时间非常长。

我已经找到了如何在“推送”数据时执行此操作的示例,但想知道如何在“拉取”数据时执行此操作。

本地机器信息:

  • 操作系统:OpenSuSe 13.2(x86_64)

  • bash 4.2.53(1)

  • OpenSSH_6.6.1p1、OpenSSL 1.0.1k-fips 2015 年 1 月 8 日

远程机器信息:

  • 操作系统:CentOS 版本 5.11(最终版)
  • bash 3.2.25(1)
  • OpenSSH_4.3p2、OpenSSL 0.9.8e-fips-rhel5 2008 年 7 月 1 日

答案1

尝试从user@localhost

 > ssh -l remoteuser remotehost "tar cf - dir_to_transfert" > remote.tar

在哪里

  • >是提示
  • ssh -l remoteuser remotehost将您连接到远程主机
  • "tar cf - dir_to_transfert"对标准输出执行远程 tarin
  • > remote.tar将 ssh 的输出重定向到本地文件名remote.tar

如果您被允许在远程主机上使用 tar,这将起作用。

相关内容