手册页没有这方面的例子。我很难告诉 rsync 只包含那些文件所在的某些文件。我不明白为什么你必须排除才能包含,为什么rsync
不包括包含文件中的所有内容,而其他所有内容都将被排除。
这是我的脚本:
rsync -ruv --rsh=ssh --include-from=zz-rsync-test.prod.incl /usr2/subdir remoteSrv:/tmp/.
这是我的包含文件,但它不起作用:它复制了太多东西:它复制了 /usr2/subdir 中的所有内容(包括目录subdir
,很奇怪),而这些我并不需要。我只想复制目录中的 per、42f 和 xml 文件data/text_forms
。
+ data/text_forms/*.per
+ data/text_forms/*.42f
+ data/text_forms/*.xml
+ data/text_forms/*.xml.*
并且以下内容不起作用,它不会复制任何内容:
- *
+ data/text_forms/*.per
+ data/text_forms/*.42f
+ data/text_forms/*.xml
+ data/text_forms/*.xml.*
并且下面的操作也不起作用,它没有复制任何内容:
- *
+ data/
+ data/text_forms/*.per
+ data/text_forms/*.42f
+ data/text_forms/*.xml
+ data/text_forms/*.xml.*
并且下面的操作也不起作用,它没有复制任何内容:
- *
+ data/
+ data/text_forms/
+ data/text_forms/*.per
+ data/text_forms/*.42f
+ data/text_forms/*.xml
+ data/text_forms/*.xml.*
以下方法也不起作用:
+ */
+ /data/text_forms/*.per
+ /data/text_forms/*.42f
+ /data/text_forms/*.xml
+ /data/text_forms/*.xml.*
- *
以下操作均不起作用:
+ /data/
+ /data/text_forms/
+ /data/text_forms/*.per
+ /data/text_forms/*.42f
+ /data/text_forms/*.xml
+ /data/text_forms/*.xml.*
- *
答案1
我找到了解决方案。我花了整整两天的时间才找到它。我希望这能帮助你节省那么多时间。
subdir
第一个问题是包含了中的子目录/usr2/subdir
,但我不希望包含整个目录,我只希望它成为基目录,因此它需要在末尾有一个斜杠,如/usr2/subdir/
,所以我的新命令如下所示:
rsync -ruvv --rsh=ssh --include-from=zz-rsync-test.prod.incl /usr2/subdir/ remoteSrv:/tmp/.
请注意,我v
在命令行中添加了一个额外选项 ( -ruvv
),以获取有关运行命令时排除或包含的内容的更多详细信息。修复基本目录和额外内容后,v
构建正确的包含文件会更容易一些:
+ data/
+ data/text_forms/
+ data/text_forms/*.per
+ data/text_forms/*.42f
+ data/text_forms/*.xml
+ data/text_forms/*.xml.*
- *
所有+
行都必须放在 之前- *
,特别是对于目录,因为我必须明确包含要扫描的每个目录,即使我不想直接获取这些目录中的文件。我做了一个测试,添加了data/anyTestFile1
和 ,data/text_forms/anyTestFile2
因为我不确定它们是否会被拾取,但它们没有,所以它正在做我想要的事情......终于。