29

尝试 rsync 某些扩展名(*.sh)的文件,但下面的 bash 脚本仍然传输所有文件,为什么?

从=/家/xxx
rsync -zvr --include="*.sh" $from/* root@$host:/home/tmp/
4

4 回答 4

26

您需要添加一个 --exclude all 并且它必须在 --include 之后

rsync -zvr --include="*.sh" --exclude="*" $from/*  root@$host:/home/tmp/
于 2013-02-01T22:20:52.743 回答
22

--include是你不想要的文件--exclude。由于您没有在未来的参数中排除任何参数,因此没有效果。你可以做:

from=/home/xxx
rsync -zvr --include="*.sh" --include="*/" --exclude="*" "$from" root@$host:/home/tmp/

递归复制所有 .sh 文件(--include不跳过可能包含 .sh 文件的目录的额外内容)

于 2013-02-01T22:23:03.983 回答
6

要添加的东西,至少在我的机器(FreeBSD 和 OS X)上,这是行不通的:

rsync -aP --include=*/ --include=*.txt --exclude=* * /path/to/dest

但这确实:

rsync -aP --include=*/ --include=*.txt --exclude=* . /path/to/dest

是的,通配符当前目录似乎覆盖了排除。

于 2014-04-28T13:42:11.533 回答
5

我修复了通过--exclude=*.*更改--exclude=*的问题,我知道 * exclude 包含文件所在的文件夹。

于 2015-03-23T10:27:18.510 回答