假设我的路径上有以下结构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_path
anddestination_path
作为全局路径? (而不是让它复制具有相对路径的内容)
答案1
以下应该做你想做的事:
rsync --recursive --prune-empty-dirs --include '*/' --include '*/B/**' --exclude '**' origin_path/ destination_path/
第一条规则包括所有目录(否则 rsync 将不会下降到顶级目录)。第二条规则包括“B”子目录中的所有内容。第三条规则排除了其他一切。该--prune-empty-dirs
选项忽略空目录(因为我们使用第一条规则包含所有目录)。