How to exclude files in rsync?

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/

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.