rsync根据--exclude位置排除文件

时间:2017-01-07 10:21:30

标签: rsync

我有一个简单的rsync脚本用于同步源和测试文件:

rsync -a --include '*/' --include '*.hpp' --include '*.cpp' --include "Test/*" --exclude 'main.cpp'  --exclude 'makefile' --exclude '*' --progress . somewhere/

虽然它正确排除了makefile,但在执行此操作时不会排除main.cpp

rsync -a --include '*/' --exclude 'main.cpp' --include '*.hpp' --include '*.cpp' --include "Test/*"--exclude 'makefile' --exclude '*' --progress . somewhere/

似乎工作。为什么呢?

1 个答案:

答案 0 :(得分:1)

来自the man page

  

当构建要传输的文件/目录列表时,rsync依次检查要转移的包含/排除模式列表中的每个名称,并对第一个匹配模式执行操作:如果它是排除模式,则该文件被跳过;如果是包含模式,则不跳过该文件名;如果找不到匹配的模式,则不跳过文件名。

因此,如果您希望排除--exclude,则需要在与main.cpp匹配的--include模式之前匹配--filter模式。

如果你正在使用--include,那同样适用。实际上,--exclude--filter只是某些layoutAttributesForElements规则的简写。