我喜欢同步来自两个位置的路径/文件子集的更改。我有所有更改的路径,比如某些版本管理工具会列出,但没有信息它们发生了什么。听起来很简单,但似乎几乎不可能......这里有一些警告:
使用多个源参数并将其与/./
类似
rsync -a --delete /some/path/./file1 /some/path/./subfolder/file2 host:/some/path
除了已移动或已删除的文件之外,它的工作原理在源端不再存在。这些是rsync投诉,而不是在目标方面删除。
所以我尝试使用过滤器代替多个来源,例如--include=/subfolder/file1 --exclude=*
。但是,如果在省略dir的情况下停止递归,则它会在顶层停止,并且不会同步任何文件。
所以我在exclude语句之前添加了--include=*/
,以便再次启用递归。然后,我列表中不存在的任何文件夹将自动同步,例如。它的元数据是同步的。同样使用-v
我最终得到了所有文件夹的混乱输出。
所以我按照一些人的建议添加了-m
,修剪了'空'的导演(这些导演并非真空,但是由排除部分渲染)。但是,这确实与--delete
交互,因为现在列出了所有目录以供删除。与其他过滤器相比,-m
似乎也将匹配的空目录放入删除列表。
现在我的想法已经不多了......
答案 0 :(得分:0)
刚出现这个问题。通常--files-from=F
,其中F包含要更新的路径列表,很好,除非要删除F中的某些路径,在这种情况下它会抱怨它无法统计源文件。
所以,我构建了一个include-from文件。假设你有路径a / b / c和p / q / r来镜像,写一个文件“filter”包含:
+ a
+ a/b
+ a/b/c
+ a/b/c/**
+ p
+ p/q
+ p/q/r
+ p/q/r/**
- *
然后使用命令
rsync [-v] -r --delete --include-from=filter source/ target