0

我喜欢同步来自两个位置的路径/文件子集的更改。我有所有更改的路径,例如某些版本管理工具会列出,但没有信息发生在他们身上。听起来很简单,但似乎几乎是不可能的......这里有一些警告:

使用几个源参数并用/./like固定它们

rsync -a --delete /some/path/./file1 /some/path/./subfolder/file2 host:/some/path

除了源端不再存在的已移动或删除的文件外,此方法有效。这些是 rsync 的投诉,并没有在目标端删除。

所以我尝试使用过滤器而不是多个来源,比如--include=/subfolder/file1 --exclude=*. 但是,由于如果省略了 dir,则递归停止,它会在顶层停止,并且不会同步任何文件。

所以我--include=*/在排除语句之前添加了,再次启用递归。然后任何不在我列表中的文件夹都会自行同步,例如。它的元数据是同步的。此外,-v我最终得到了所有文件夹的混乱输出。

因此,我-m按照某些人的建议添加了删除“空”目录(实际上并不是空的,而是由排除项呈现的)。但是,这确实与 交互--delete,因为现在列出了所有目录以供删除。似乎与其他过滤器相比,-m也将匹配的空目录放入删除列表。

现在我的想法已经用完了......

4

1 回答 1

0

刚遇到这个问题。通常--files-from=F,其中 F 包含要更新的路径列表很好,除非要删除 F 中的某些路径,在这种情况下,它会抱怨它无法统计源文件。

所以,我构建了一个包含源文件。假设您有路径 a/b/c 和 p/q/r 进行镜像,请编写一个文件“过滤器”,其中包含:

+ 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
于 2013-06-25T15:03:44.797 回答