The filter rules allow for flexible selection of which files to
transfer (include) and which files to skip (exclude). The rules
either directly specify include/exclude patterns or they specify
a way to acquire more include/exclude patterns (e.g. to read them
from a file).
As the list of files/directories to transfer is built, rsync
checks each name to be transferred against the list of
include/exclude patterns in turn, and the first matching pattern
is acted on: if it is an exclude pattern, then that file is
skipped; if it is an include pattern then that filename is not
skipped; if no matching pattern is found, then the filename is
not skipped.
Rsync builds an ordered list of filter rules as specified on the
command-line. Filter rules have the following syntax:
RULE [PATTERN_OR_FILENAME]
RULE,MODIFIERS [PATTERN_OR_FILENAME]
You have your choice of using either short or long RULE names, as
described below. If you use a short-named rule, the ','
separating the RULE from the MODIFIERS is optional. The PATTERN
or FILENAME that follows (when present) must come after either a
single space or an underscore (_). Here are the available rule
prefixes:
exclude, '-'
specifies an exclude pattern.
include, '+'
specifies an include pattern.
merge, '.'
specifies a merge-file to read for more rules.
dir-merge, ':'
specifies a per-directory merge-file.
hide, 'H'
specifies a pattern for hiding files from the transfer.
show, 'S'
files that match the pattern are not hidden.
protect, 'P'
specifies a pattern for protecting files from deletion.
risk, 'R'
files that match the pattern are not protected.
clear, '!'
clears the current include/exclude list (takes no arg)
When rules are being read from a file, empty lines are ignored,
as are comment lines that start with a "#".
Note that the --include
& --exclude
command-line options do not
allow the full range of rule parsing as described above -- they
only allow the specification of include / exclude patterns plus a
"!
" token to clear the list (and the normal comment parsing when
rules are read from a file). If a pattern does not begin with
"-
" (dash, space) or "+
" (plus, space), then the rule will be
interpreted as if "+
" (for an include option) or "-
" (for an
exclude option) were prefixed to the string. A --filter
option,
on the other hand, must always contain either a short or long
rule name at the start of the rule.
Note also that the --filter
, --include
, and --exclude
options
take one rule/pattern each. To add multiple ones, you can repeat
the options on the command-line, use the merge-file syntax of the
--filter
option, or the --include-from
/ --exclude-from
options.