2013-04-21 46 views
1

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

你可以采取
/Users/apple/a --> /home/orange/. 
/etc/var/b --> /usr/local/var/. 
/other/c --> /wildly/different/. 
+0

我很失望,这是彻底关闭。为了记录,我投票把它移到超级用户。 – ruakh 2013-04-22 03:28:23

回答

1

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

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

然后只复制/tmp/root/远程机器,这将仅仅是一个单一的复制操作上。

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 [email protected] ' tar -xf - 
        mv tmp/a /home/orange/ 
        mv tmp/b /usr/local/var/ 
        mv tmp/c /wildly/different/ 
        rmdir tmp/ 
        ' 
rm -r tmp/ 

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

相关问题