我有多个源目录,比如/home/me/source1和/mnt/somedisk/source2 。 我想把它们分别推到/home/someoneelse/dest1和/home/someoneelse/dest 。 我想用一个rsync命令来做到这一点,这可能吗?
如何将N个目录转换为N个目录,每个目录都是uniqe?
如果不需要复制任何符号链接,那么可以在接收端设置一个目录,模拟发送端的目录布局,每个链接指向预期的目的地。
一种方法是在接收端使用符号链接source1和source1 ,并使用--keep-dirlinks运行接收进程。
如果你不得不传输符号链接,那么你可能会让--no-implied-dirs为你工作。 再一次你会在接收端有符号链接,但这次是在一个目录结构中,也就是说home/me/是目录(在rsync目标文件夹内,你想要的位置), home/me/source1是符号链接到/home/someoneelse/dest1 。 如果不使用--keep-dirlinks ,那么你不应该传输source1本身(因为这会删除符号链接并replace为一个目录),而是代替source1所有文件,即/home/me/source1/* 。 使用shopt -s dotglob来匹配隐藏文件。
所有这些只是经过了远程testing:我知道在某些时候我有这方面的工作,但是现在没有可用的细节或命令。 因此,在生产设置中使用这些组合之前,请testing可能的组合,尤其是目录和符号链接到目录之间的更改。
如果你经常这样做,我也build议通过脚本处理。
如果目标根目录始终相同,比如: rsync /foo/blah1 /bar/和rsync /fin/blah2 /bar/
你可以用一个简单的Bash for循环来处理。
for x in /foo/blah1 /fin/blah2 do rsync $x /bar done
就此而言,您还可以设置嵌套循环,以便各种来源可以到达每个目的地。 我们已经把这个作为我们办公室的基本备份系统多年了。