![将具有多个根的 rdist 配置转换为 rsync](https://linux22.com/image/94362/%E5%B0%86%E5%85%B7%E6%9C%89%E5%A4%9A%E4%B8%AA%E6%A0%B9%E7%9A%84%20rdist%20%E9%85%8D%E7%BD%AE%E8%BD%AC%E6%8D%A2%E4%B8%BA%20rsync.png)
我正在实现与 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