我创建了一个程序,它遍历一堆文件并为其中一些文件调用:
scp <file> user@host:<remotefile>
但是,就我而言,可能有数千个小文件需要传输,并且 scp 正在为每个文件打开一个新的 ssh 连接,这会产生相当大的开销。
我想知道是否没有解决方案让我保持一个进程运行以维护连接,并且我可以向它发送“请求”以复制单个文件。
理想情况下,我正在寻找一些发送者和接收者程序的组合,这样我就可以在开始时启动一个进程 (1):
ssh user@host receiverprogram
对于每个文件,我调用一个命令 (2):
senderprogram <file> <remotefile>
并将 (2) 的输出通过管道传输到 (1) 的输入,这将导致文件被传输。最后,我可以发送进程 (1) 一些信号来终止。
优选地,发送者和接收者程序是用于Unix的开源C程序。他们可以使用套接字而不是管道或任何其他创造性的解决方案进行通信。
然而,每个文件在我迭代它的那一刻被传输是一个重要的限制scp
:收集文件列表然后调用一个实例来一次传输所有文件是不可接受的。此外,我对接收主机只有简单的 shell 访问权限。
更新:我找到了使用 ssh 的多路复用功能解决连接开销问题的方法,请参阅下面我自己的答案。然而,我开始赏金,因为我很想知道是否存在我在这里描述的发送者/接收者程序。似乎应该存在可以使用的东西,例如xmodem/ymodem/zmodem?