我想要 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
这也将排除名为的目录缓存源路径中的任何位置。