Red Hat Bugzilla – Bug 10343
rsync --exclude '*' --include '*' doesn't work as documented
Last modified: 2014-03-16 22:13:09 EDT
According to the rsync(1) man page (or my interpretation of it), the
following two should be equivalent:
rsync --exclude '*' --include '*'
However, they are not. In fact, the "--exclude '*'" seems to dominate all
"--include" options, such that once everything is excluded, nothing can
then be included. This is in direct contradition with the documentation,
which clearly states (WRT "--include"): "This option tells rsync to not
exclude the specified pattern of filenames." The example uses of
"--exclude" and "--include" given in the man page also do not work.
Ugh. Make this a documentation enhancement request. Turns out that the
ordering is significant. Specifically, if you want to include only specific
files and exclude all else, you need to identify the files to include (using
"--include") *first*, *then* exclude everything else. Thus, the following are
rsync --include '*' --exclude '*'
but the following are not:
rsync --include '*' --exclude '*' # excludes nothing
rsync --exclude '*' --include '*' # excludes everything
The documentation should make this more clear.
The current (2.4.2) documentation says:
o --include "*/" --include "*.c" --exclude "*" would
include all directories and C source files
rsync builds a ordered list of include/exclude options as
specified on the command line. When a filename is encoun-
tered, rsync checks the name against each exclude/include
pattern in turn. The first matching pattern is acted on.
This seems to imply that patterns are checked in the order
on the command line.