我有多个源目录,比如/home/me/source1
和/mnt/somedisk/source2
。我想将它们分别推送到类似/home/someoneelse/dest1
和的位置/home/someoneelse/dest
。我想使用一个 rsync 命令来实现这一点,可以吗?
那么对于 N 个目录到 N 个目录,其中每个目录都是唯一的,情况如何?
答案1
如果您经常这样做,我还建议您通过脚本来处理。
如果目标根始终相同,例如rsync /foo/blah1 /bar/
:rsync /fin/blah2 /bar/
您可以使用简单的 Bash for 循环来处理这个问题。
for x in /foo/blah1 /fin/blah2
do
rsync $x /bar
done
而且,您还可以设置嵌套循环,以便各种源可以到达每个目的地。多年来,我们一直将其用作办公室的基本备份系统。
答案2
如果您不必复制任何符号链接,那么您可以在接收端设置一个目录,模仿发送端的目录布局,每个链接都指向预期的目的地。
一种方法是在接收端拥有符号链接source1
和,并使用运行接收进程。source2
--keep-dirlinks
如果您必须传输符号链接,那么您可能会让--no-implied-dirs
为您工作。同样,您会在接收端拥有符号链接,但这次是在目录结构内,即home/me/
将是目录(在 rsync 目标文件夹内,无论您希望它在哪里)并且home/me/source1
将是 的符号链接/home/someoneelse/dest1
。当不使用 时--keep-dirlinks
,您不应该传输source1
它本身(因为这会删除符号链接并将其替换为目录),而是传输 内的所有文件source1
,即/home/me/source1/*
。使用shopt -s dotglob
也匹配其中的隐藏文件。
所有这些都只是远程测试:我知道我曾经做过类似的事情,但现在还没有详细信息或命令可用。因此,在生产设置中使用它之前,请测试可能的组合,特别是目录之间的更改和目录的符号链接。