【问题标题】:rsync a list of pathsrsync 路径列表
【发布时间】:2018-02-03 21:43:58
【问题描述】:

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

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

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

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

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

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

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

现在我的想法已经不多了……

【问题讨论】:

    标签: rsync


    【解决方案1】:

    刚刚遇到这个问题。通常--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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多