rsync 目录树结构具有有限的深度并排除特定文件夹

rsync 目录树结构具有有限的深度并排除特定文件夹

我想要 rysnc 我的文件夹和子文件夹树结构,不带文件,但最大深度为 3 (/folder1/folder2/folder3) 并排除特定文件夹(例如cache/)

我尝试过这个命令:

$ rsync -azv --include=*/ --exclude=* --exclude=cache/ --exclude=/*/*/*/ source/ destination/

但它不起作用...它正在复制所有文件夹和子文件夹;它不尊重最大深度,并且不排除缓存文件夹

是否需要使用另一个参数来限制 rsyc 的最大深度;我现有的参数有什么问题?

ps 上次我问这个问题时,它被标记为重复 Rsync 过滤器:仅复制一种模式

它不是,因为它不处理最大深度,也不只处理 rsync 目录树结构。谢谢

答案1

您需要在包含之前排除多级模式,*/因为后者意味着“包含所有目录”,覆盖后面的排除。您还需要添加一个额外的级别来*/指示目录,/*/*/*/因此意味着“排除三个或更多级别。

命令变为:

rsync -azv --exclude='/*/*/*/*/' --include='*/' --exclude='*' --exclude=cache/ source/ destination/

(正如通配符已经评论的那样,您必须始终引用或转义 shell 元字符。)

答案2

要同步两个目录树,同时遵守三个子目录的最大深度限制,请使用:

rsync -avz /source/ /destination --exclude "/**/**/**/*" --exclude=cache

这也将排除名为的目录缓存源路径中的任何位置。

相关内容