How to exclude multiple directories with rsync?
I am trying to backup my home directory using rsync, and I want to exclude some of the directories that contain junk. I want to specifically exclude /home/ben/.ccache and /home/ben/build. Unfortunately the documentation for rsync was information overload and didn't answer my question. This is what I tried:
rsync -arv --exclude "/home/ben/.ccache:/home/ben/build" /home/ben /media/ben/thumbdrive/What is the right way to do this?
13 Answers
OK I feel really dumb. Before I even posted this question my friend showed me how to do it and it is really simple. To exclude multiple directories you just use multiple --exclude=path switches. So my command above properly written is as follows:
rsync -arv --exclude=.ccache --exclude=build /home/ben /media/ben/thumbdrive/Note: Use relative paths with exclude. The paths are relative to the source directory, here /home/ben.
10When having multiple directories and/or files to exclude, make a text file and use the --exclude-from switch. Make a file called exclude_me.txt and in it list your exclusions.
Example (/home/ben/exclude_me.txt):
.ccache
build
.java
.gvfs
.xsession-errorsThen your rsync would look something like this:
rsync -arv --exclude-from='/home/ben/exclude_me.txt' /home/ben /media/ben/thumbdrive/This is some information on filter rules that may help:
/dir/means exclude the root folder/dir/dir/*means get the root folder/dirbut not the contentsdir/means exclude any folder anywhere where the name containsdir/Examples excluded:
/dir/, /usr/share/directory/, /var/spool/dir/ /var/spool/lpd/cfmeans skip files that start withcfwithin any folder within/var/spool/lpd
Also see the filter rules section on the man page.
4You can also exclude multiple paths within curly braces:
rsync -arv --exclude={.ccache,build} /home/ben /media/ben/thumbdrive/ 6