Include and Exclude

Benjamin R. Haskell rsync at benizi.com
Sat Dec 26 21:57:37 MST 2009


On Thu, 24 Dec 2009, LuKreme wrote:

> I thought this command would do what I wanted, but instead it doesn't transfer any files:
> 
> rsync -avh --stats --password-file=/var/rsync.passwd --include=Maildir/ 
> --exclude=* mail::root/usr/home /backup/usr/
> 
> I want to backup ONLY the /usr/home/*/Maildir directories. I don't want 
> any other files from any other directories to be transferred.
> 
> I can see in the man page where this is a problem:
> 
>        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).
> 
> It then gives an example of including the parent directories.
> 
> Trouble is, I do not want any files in /usr/home/fred/ to be synced at 
> all, only the files (and directories) in /usr/home/fred/Maildir/

The following comes close:

rsync -avh '--include=/*/' '--include=/*/Maildir/***' '--exclude=*' home/ 
backup/

(Might need to preface the first /* components in the patterns with 
'root/usr/home' or '/root/usr/home' for your case.)

I say "comes close" because it gets an extra empty directory for every 
user directory, even if it doesn't contain a Maildir.


> Also, I don't necessarily know all the pathnames in /usr/home/; I don't 
> want to have to build a manual include list every time I want to sync 
> these folders.

Not sure if "I don't want to have to build a manual include list" 
precludes using a script to generate the list, but for solving this same 
problem a while back (backing up user maildirs), I used something like the 
following:

getent passwd | cut -f6 -d: | sort | uniq \
| perl -lnwe '$_.="/Maildir"; print if -e' \
| xargs -iZ rsync -avzR /./Z/ backup/Z/

I don't remember if that's the exact rsync command, but the point is that 
it wasn't too hard to generate the list of Maildir directories, assuming 
it's possible to list the homedirs.

Best,
Ben


More information about the rsync mailing list