0

当通过 SSH 从一个 UNIX 系统复制到另一个系统时,是否可以在一个操作中将每个文件复制到不同的目标(即避免为每个文件设置新的 SSH 连接的开销),例如通过在像这样的文件:

/Users/apple/a --> /home/orange/.
/etc/var/b --> /usr/local/var/.
/other/c --> /wildly/different/.
4

3 回答 3

1

我想你可以这样写:

mkdir ./tmp/
ln -s /Users/apple/a /etc/var/b /other/c ./tmp/
# Now ./tmp/ has symbolic links to all these files.
# Tar the files to STDOUT, and pipe that over SSH to a
# tar that's reading from STDIN:
tar -ch tmp/* \
  | ssh USER@HOST ' tar -xf -
                    mv tmp/a /home/orange/
                    mv tmp/b /usr/local/var/
                    mv tmp/c /wildly/different/
                    rmdir tmp/
                  '
rm -r tmp/

. . . 不是很优雅,但它只需要一个 SSH 连接。

于 2013-04-21T07:08:44.637 回答
1

您可以采取的一种策略是在您的本地系统(发送方)上构建一个“根”目录,模仿您希望在接收机器上拥有的文件结构,然后将其复制到/另一台机器上的根目录()。例如,您可以将以下临时目录构建为“根”:

/tmp/root
/tmp/root/home/orange/a
/tmp/root/usr/local/var/b
/tmp/root/wildly/different/c

然后只需复制/tmp/root/远程计算机上,这将只是一次复制操作。

于 2013-04-21T06:58:57.667 回答
1

您可能需要考虑SSH 会话共享。不再需要重新验证,所以速度很快。

于 2013-04-21T08:13:18.810 回答