Rsync is a very useful application to mirror files from one server to another. This is particularly helpful in web hosting situations where you test a site prior to launch or update then have to copy files to one or more production servers.
Typically, one would rsync the entire module. Rsync, however, does provide directives to include and exclude files. These directives take on filesystem wildcard arguments. You can have multiple include/exclude directives, the easiest way is using a file listing the directives. Rsync performs a pattern match in the order the directives are listed for each file in the module. Itwill execute the first directive it matches, include or exclude. Excluding files is simple as, by default, rsync will sync the entire module. The exclude directive(s) just list which items to skip over.
rsync -rav --exclude=*.txt user@source::modulename /path/to/local/destination
This would leave out all .txt files from syncing. Conversely, if you want to include only certain files, the directives you need are not as apparent. Again, by default, rsync includes all files. Hence if you’re looking to only include one files, a simple include directive will do work:
rsync -rav --include=*.txt user@source::modulename /path/to/local/destination
You would expect only .txt files to sync. However, rsync mirrors everything by default. If you only want .txt files, you need a default exclude directive:
rsync -rav --include=*.txt --exclude=* user@source::modulename /path/to/local/destination
Another issue is subdirectories. If you want to only include a file nested down a level, images/pic.gif, you have to also include the parent directory separately:
rsync -rav --include=images/ --include=images/pic.gif --exclude=* user@source::modulename /path/to/local/destination
Lastly, if you want to include a directory and everything under it, your wildcard must be a double asterisk (**):
rsync -rav --include=images/** --exclude=* user@source::modulename /path/to/local/destination
The easiest thing to do for specifically including files is to start the include/exclude list with an include for all directories and end with a catchall exclude:
rsync -rav --include=*/ [set of includes] --exclude=* user@source::modulename /path/to/local/destination