将具有多个根的 rdist 配置转换为 rsync

将具有多个根的 rdist 配置转换为 rsync

我正在实现与 rsync 类似的 rdist 语法,并且我能够使用 rsync 同步我的文件和文件夹,但是在处理此 rdist 语法时,我不理解这部分,except (/home/user1/log1/*/*/sql.net /home/user1/log1/*/*/core)并且我的 rdist 包含文件是FILES=(/home/user1/log1 /home/user1/rightlog)

我如何在 rsync 中实现这一点?我试过这个rsync -rtu --exclude='/log1/*/*/sql.net' exclude='/log1/*/*/core' $FILES remote@host:$FILES

我是克隆精确的 rdist 还是需要进行更多调整?我没有得到所需的输出,而且有时sql.net可能存在于其他文件夹中,所以我无法执行此操作--exclude=sql.net

答案1

即使没有排除列表,也rsync $FILES remote@host:$FILES不起作用:它rsync /home/user1/log1 /home/user1/rightlog remote@host:/home/user1/log1 /home/user1/rightlog会扩展为目标/home/user1/rightlog(但 rsync 会抱怨您正在混合本地和远程源)。

您可以使用 rsync 指定多个源,但它们都会复制到同一目标,并且排除列表等参数适用于所有源。

如果不同的子树需要不同的参数,那么您需要单独调用 rsync。如果不需要不同的参数,则同步公共根,但仅包含要同步的部分。

rsync --include='/log1' --include='/rightlog' --exclude='/*' /home/user1 remote@host:/home/user1

您不需要单独调用 rsync 来获得不同的排除列表,因为它们只需要包含前导路径组件。

rsync --include='/log1' --include='/rightlog' --exclude='/*' \
      --exclude='/log1/*/*/sql.net' --exclude='/log1/*/*/core' \
      /home/user1 remote@host:/home/user1

相关内容