On 5/15/2013 4:13 AM, Brian K. White wrote:
Consider the following directory structure

/foo/aaa/*/*
/foo/bbb/*/*
/foo/ccc/*/*

I want to sync all of /foo,
but exclude /foo/aaa
but not exclude any other occurances of "aaa" or "foo/aaa" (be they
files or dirs) that might occur within the other dirs /foo/bbb/*
/foo/ccc/* etc

I don't want to exclude /foo/bbb/aaa or /foo/ccc/111/aaa or
/foo/ccc/111/foo/aaa etc...

Destination is running rsync daemon and has a module named root that
points to "/" such that normally, for the full /foo with no exclude,
it's very simple, my rsync command would just be:

rsync -avz /foo ${DEST}::root

That works fine without the exclude.

So, to that I want to add a filter file. (Well, I assume that's what I
want)

rsync -avz -f ". filter" /foo ${DEST}::root

If I construct a filter file like this:
- aaa
+ *

or like this
- aaa/
+ *

or like this
- foo/aaa/
+ *

rsync hides the top level /foo/aaa but it also hides any other
occurrences of the exclude pattern that occur anywhere within the job
instead of just the top level one.

How can I get it to exclude just the top-level directory "/foo/aaa" ?



Never mind, I think I got it. I saw the special meaning of a leading slash in an include/exclude pattern in the man page. So:

rsync -aznvvv --exclude '/pix/trinity/' /pix ${DEST}::root
...
[sender] hiding directory pix/trinity because of pattern /pix/trinity/
...
[sender] make_file(pix/0/trinity,*,2)
[sender] make_file(pix/0/pix/trinity,*,2)
[sender] make_file(pix/0/pix/trinity/foo,*,2)
[sender] make_file(pix/0/trinity/trinity,*,2)

So it excluded /pix/trinity/ as desired, yet included other paths that had "/pix/trinity/" in them such as /pix/0/pix/trinity/foo"

I only need the single pattern at the moment so --exclude is simpler than a filter file, but just for the record I verified a filter file like this worked the same too:
- /pix/trinity/

Also please disregard the "+ *" in my previous examples. I know they are superfluous. They were in there only because I was starting with a copy of a different script that originally had "- *" at the bottom to include some patterns and exclude everything else. At the moment I need the opposite of that so when I reversed all the + & -, I ended up with a "+ *" at the bottom.

--
bkw

--
Please use reply-all for most replies to avoid omitting the mailing list.
To unsubscribe or change options: https://lists.samba.org/mailman/listinfo/rsync
Before posting, read: http://www.catb.org/~esr/faqs/smart-questions.html

Reply via email to