rsync --include选项不排除其他文件

use*_*196 21 bash rsync

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

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

Joh*_*hnQ 18

你需要添加--exclude all,它必须在--include之后

rsync -zvr --include="*.sh" --exclude="*" $from/*  root@$host:/home/tmp/
Run Code Online (Sandbox Code Playgroud)

  • 如前所述@that的答案更好,因为你需要--include ="*/"来包含子目录 (4认同)
  • 我试过了,它不传输任何数据。还尝试在我的include语句之前和之后使用exclude,它会产生相同的结果。 (2认同)

tha*_*guy 18

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

from=/home/xxx
rsync -zvr --include="*.sh" --include="*/" --exclude="*" "$from" root@$host:/home/tmp/
Run Code Online (Sandbox Code Playgroud)

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

  • 我认为排除在错误的地方; 它应该在包括之后.Rsync作用于第一个匹配模式. (6认同)
  • 这是一个很好的方法, - include ="*/"是强制性的 (3认同)

lbu*_*tlr 6

要补充的是,至少在我的机器(FreeBSD 和 OS X)上,这不起作用:

rsync -aP --include=*/ --include=*.txt --exclude=* * /path/to/dest
Run Code Online (Sandbox Code Playgroud)

但这确实:

rsync -aP --include=*/ --include=*.txt --exclude=* . /path/to/dest
Run Code Online (Sandbox Code Playgroud)

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


est*_*evo 5

我修复了--exclude =* by --exclude =*.*的问题,我明白*排除包含文件的文件夹.

  • 如果您的文件夹名称包含点(例如:“backup.12”)怎么办? (2认同)