12

I'm trying to work out the rsync filter syntax to perform complex include/excludes, and trying to achieve the following:

Include /
Exclude /home
Include /home/user1/*
Include /home/user2/subdir/*

I've tried many variations on the filter syntax, and despite reading the man page many time, I cannot get this sort of effect. Rsync filters seem to be very powerful, and I find it hard to believe they couldn't handle a common scenario such as this.

14

You need to include all of the parent directories down to the desired directory before using the exclude rule.

For instance, I use the following in a backup script:

rsync -av \ 
--filter='+ /var/' \
--filter='+ /var/backups/' \
--filter='- /var/*' \
/ \
$DEST

So in your case you would need something like the following:

rsync -av \ 
--filter='+ /home/' \
--filter='+ /home/user1/' \
--filter='+ /home/user2/' \
--filter='+ /home/user2/subdir/' \
--filter='- /home/user2/*' \
--filter='- /home/*' \
/ \
$DEST
  • Excellent. Took me some time. – yclian Feb 12 '11 at 16:00
  • Somehow, when I read the man rsync, I misunderstood the proper order of mixing includes and excludes. It took me an hour to figure it out... – Adam Ryczkowski Jul 22 '16 at 18:57
6

On the command line:

rsync --dry-run --verbose --recursive --include=/home/user1 --exclude=/home/* / DEST

Remove --dry-run to make it functional, replace "DEST" with your destination and add user and host to the source "/" if needed.

From a rule file:

rsync --dry-run --verbose --recursive --filter='merge /etc/rsync/somerules.rules' / DEST

where the contents of /etc/rsync/somerules.rules might be:

+/ /home/user1
-/ /home/*

You should test these and you may need to make some adjustments, but this should get you started.

  • OK, that works. I have a more complex case which I've added to the question. The additional include doesn't work with the subdir scenario. – brianmathis Jun 11 '10 at 16:45

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.