rsync 与绝对路径并排除子路径

rsync 与绝对路径并排除子路径

假设我的路径上有以下结构origin_path

origin_path/X=1/A/...
origin_path/X=1/B/...
origin_path/X=1/C/...
...
origin_path/X=2/A/...
origin_path/X=2/B/...
origin_path/X=2/C/...
...
...

我想在名为 的不同路径复制上面的结构 destination_path,但是仅有的包括目录对应的路径多于。

换句话说,我想获得以下信息destination_path

destination_path/X=1/B/...
destination_path/X=2/B/...
destination_path/X=3/B/...
...

为了澄清,目标路径中的某些结构可能已经存在(例如文件夹destination_path/X=*)。

据我了解,多亏了@Gilles 的评论,rsync过滤器可能非常适合这个。但是,我以前从未使用过它们,并且我很难推断出中提供的示例Rsync 过滤器:仅复制一种模式就我的情况而言。

我应该按什么顺序包含或排除我的案例中的内容?我如何告诉 rsync 使用origin_pathanddestination_path作为全局路径? (而不是让它复制具有相对路径的内容)

答案1

以下应该做你想做的事:

rsync --recursive --prune-empty-dirs --include '*/' --include '*/B/**' --exclude '**' origin_path/ destination_path/

第一条规则包括所有目录(否则 rsync 将不会下降到顶级目录)。第二条规则包括“B”子目录中的所有内容。第三条规则排除了其他一切。该--prune-empty-dirs选项忽略空目录(因为我们使用第一条规则包含所有目录)。

相关内容