rsync 多个源和目标

rsync 多个源和目标

以下按预期工作:

rsync --delete-after -uavh --progress /home/usr/test1/cool-beans /home/usr/test2/
rsync --delete-after -uavh --progress /home/usr/test1/pineapple /home/usr/test2/
rsync --delete-after -uavh --progress /home/usr/test1/pizza /home/usr/test2/
rsync --delete-after -uavh --progress /home/usr/test1/dragons /home/usr/test2/elephant/

然而,当我将其简化为:

rsync --delete-after -uavh --progress \
    /home/usr/test1/cool-beans /home/usr/test2/ \
    /home/usr/test1/pineapple /home/usr/test2/ \
    /home/usr/test1/pizza /home/usr/test2/ \
    /home/usr/test1/dragons /home/usr/test2/elephant/ 

我收到一个错误。它不是根据需要仅将文件夹“dragons”放入“elephant”中,而是将所有“cool-beans”、“pineapple”、“pizza”和“dragons”放入“elephant”中,这是不希望的。如何以简化的方式编写它(没有第一个示例的重复),同时实现相同的输出?谢谢!

答案1

您不能在单个rsync命令中包含多个目标。当您尝试“简化”版本时发生的情况是,除了最后一个路径之外的所有路径都被视为复制数据的源,因此您不仅从cool-beanspineapplepizza以及dragons自身复制test2(重复)。--dry-run当第一次尝试某些东西时,这个选项非常有用。

您的通话可以简化为两次通话。要么完整:

rsync --delete-after -uavh --progress /home/usr/test1/cool-beans /home/usr/test1/pineapple /home/usr/test1/pizza /home/usr/test2/
rsync --delete-after -uavh --progress /home/usr/test1/dragons /home/usr/test2/elephant/

或者使用函数来封装公共元素:

myRsync1() {
    rsync --delete-after -uavh --progress "$@"
}

myRsync1 /home/usr/test1/cool-beans /home/usr/test1/pineapple /home/usr/test1/pizza /home/usr/test2/
myRsync1 /home/usr/test1/dragons /home/usr/test2/elephant/

如果您可以保证大多数路径以固定组件开头,您可以通过提供公共路径(必须已经存在)作为第一个参数来进一步简化函数调用的可见使用:

myRsync2() (
    cd -- "$1" || return 1
    shift
    rsync --delete-after -uavh --progress "$@"
)

然后调用:

myRsync2 /home/usr/test1 cool-beans pineapple pizza /home/usr/test2/
myRsync2 /home/usr/test1/dragons /home/usr/test2/elephant

或者:

myRsync2 /home/usr test1/cool-beans test1/pineapple test1/pizza test2/
myRsync2 /home/usr test1/dragons test2/elephant

答案2

你不能。rsync可以接受多个源,但只能接受一个目的地。 rsync 必须调用多次。

但是,您可以将相同的 rsync 和选项部分放入变量中并调用它:

rsync_call="rsync --delete-after -uvah --progress"
$rsync_call /source/one/ /destination/one/
$rsync_call /source/two/ /destination/two/

相关内容