我有一个简单的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/
似乎工作。为什么呢?
答案 0 :(得分:1)
来自the man page:
当构建要传输的文件/目录列表时,rsync依次检查要转移的包含/排除模式列表中的每个名称,并对第一个匹配模式执行操作:如果它是排除模式,则该文件被跳过;如果是包含模式,则不跳过该文件名;如果找不到匹配的模式,则不跳过文件名。
因此,如果您希望排除--exclude
,则需要在与main.cpp
匹配的--include
模式之前匹配--filter
模式。
如果你正在使用--include
,那同样适用。实际上,--exclude
和--filter
只是某些layoutAttributesForElements
规则的简写。