I'm using ubuntu server 12.04, now I want to backup some files using rsync, here is a try:

rsync -aAX $HOME/Documents/* $HOME/Backups/TEST --exclude={$HOME/Documents/another/*,$HOME/Documents/temp/*} 

As you can see, I want to backup all files in the folder $HOME/Documents to folder $HOME/Backups/TEST, but exclude files in folder another and temp. But I failed, rsync still copied the files in both excluded folders:

ls $HOME/Backups/TEST/another

test is a file in the folder another, and it is also copied though I exclude the file in rsync, why? How to let those files be actually excluded?


There are several issues with your rsync command (also see manpage for rsync for detailed explanation of filter rules).

  • we need an --exclude command each for any given pattern.
  • paths given need to be relative to the source path (no absolute paths).
  • options need to be given before we state source and destination.

For your example the following syntax will work:

rsync -avAX --exclude=another/ --exclude=temp/ ~/Documents/ ~/Backups/TEST

Note that if an exlude pattern ends with / it refers to a directory. If you omit it both, files and directories with that name will be excluded. Replace it with a wildcard * to exclude all files or directories with that string in their names.

  • 6
    This is not entirely correct. I'm not sure how it works, but from experimentation, --exclude=/foo will exclude the directory foo directly in the source, but --exclude=foo will exclude any directories named foo, even in subdirectories. – Sparhawk Nov 15 '13 at 2:20

You may find it easier to add .rsync-filter files in your source directories, and use the -F option.

From the man page:

-F : The -F option is a shorthand [...] for this rule:

 --filter='dir-merge /.rsync-filter'

This tells rsync to look for per-directory .rsync-filter files that have been sprinkled through the hierarchy and use their rules to filter the files in the transfer.

For example: in $HOME/Documents/.rsync-filter

# you can add comments in filter files

- /another/
- /temp/

Instead of -, you can also write the whole word exclude.

Now you can

rsync -aAX -F $HOME/Documents/ $HOME/Backups/TEST/

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.