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