Yet another filter question

Christoph Biedl cbiedl at
Sat May 7 22:14:22 UTC 2016

Wayne Davison wrote...

> On Tue, May 3, 2016 at 1:07 PM, Christoph Biedl <cbiedl at> wrote:
> >   + *.git/.git/*
> >   - *.git/
> >
> >From the man page near the start of the "INCLUDE/EXCLUDE PATTERN RULES"
> section:
> *Note that, when using the --recursive (-r) option (which is implied by
> > -a), every subcomponent of every path is visited from the top down, so
> > include/exclude patterns get applied recursively to each subcomponent’s
> > full name (e.g. to include "/foo/bar/baz" the subcomponents "/foo" and
> > "/foo/bar" must not be excluded). The exclude patterns actually
> > short-circuit the directory traversal stage when rsync finds the files to
> > send.*

Yeah, things like this are the reason why I got the impression rsync's
filter behaviour is acting strange. It certainly makes perfect sense
once you've understood in great detail how it works - until then you're
just confused.

> Thus, your latter exclude prevents the first include from ever seeing any
> data that it could match. You'd need to use something more like this:
> + *.git/.git/
> - *.git/*

No, that one kills files inside *.git/.git/, too.

Kevin's suggestion however does the trick. Thanks!

Another working solution:

+ /*.git/.git/
- /*.git/*


More information about the rsync mailing list