According to the rsync(1) man page (or my interpretation of it), the following two should be equivalent: rsync 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. Using rsync-2.3.1-1.
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 equivalent: rsync 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 and, also: 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.