dit(bf(--no-whole-file)) Turn off --whole-file, for use when it is the
default.
-dit(bf(-p, --perms)) This option causes rsync to update the remote
-permissions to be the same as the local permissions.
+dit(bf(-p, --perms)) This option causes rsync to set the destination
+permissions to be the same as the source permissions.
+
+Without this option, each new file gets its permissions set based on the
+source file's permissions and the umask at the receiving end, while all
+other files (including updated files) retain their existing permissions
+(which is the same behavior as other file-copy utilities, such as cp).
dit(bf(-o, --owner)) This option causes rsync to set the owner of the
destination file to be the same as the source file. On most systems,
You may use as many --exclude options on the command line as you like
to build up the list of files to exclude.
-See the section on exclude patterns for information on the syntax of
+See the EXCLUDE PATTERNS section for information on the syntax of
this option.
dit(bf(--exclude-from=FILE)) This option is similar to the --exclude
specified pattern of filenames. This is useful as it allows you to
build up quite complex exclude/include rules.
-See the section of exclude patterns for information on the syntax of
+See the EXCLUDE PATTERNS section for information on the syntax of
this option.
dit(bf(--include-from=FILE)) This specifies a list of include patterns
also will create hard links from em(DIR) to the destination directory for
unchanged files. Files with changed ownership or permissions will not be
linked.
+Like bf(--compare-dest) if DIR is a relative path, it is relative
+to the destination directory.
dit(bf(-z, --compress)) With this option, rsync compresses any data from
the files that it sends to the destination machine. This
selection of which files to transfer and which files to skip.
rsync builds an ordered list of include/exclude options as specified on
-the command line. When a filename is encountered, rsync checks the
+the command line. Rsync checks each file and directory
name against each exclude/include pattern in turn. 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 include/exclude pattern is found then the
filename is not skipped.
+The filenames matched against the exclude/include patterns
+are relative to the destination directory, or "top
+directory", so patterns should not include the path elements
+of the source or destination directories. The only way in
+which a pattern will match the absolute path of a file or
+directory is if the source path is the root directory.
+
Note that when used with -r (which is implied by -a), every subcomponent of
every path is visited from top down, so include/exclude patterns get
applied recursively to each subcomponent.
The patterns can take several forms. The rules are:
itemize(
+
it() if the pattern starts with a / then it is matched against the
start of the filename, otherwise it is matched against the end of
- the filename. Thus "/foo" would match a file called "foo" at the base of
- the tree. On the other hand, "foo" would match any file called "foo"
+ the filename.
+ This is the equivalent of a leading ^ in regular expressions.
+ Thus "/foo" would match a file called "foo" at the top of the
+ transferred tree.
+ On the other hand, "foo" would match any file called "foo"
anywhere in the tree because the algorithm is applied recursively from
top down; it behaves as if each path component gets a turn at being the
end of the file name.
+ The leading / does not make the pattern an absolute pathname.
it() if the pattern ends with a / then it will only match a
directory, not a file, link or device.
it() if the pattern includes a double asterisk "**" then all wildcards in
the pattern will match slashes, otherwise they will stop at slashes.
- it() if the pattern contains a / (not counting a trailing /) then it
- is matched against the full filename, including any leading
- directory. If the pattern doesn't contain a / then it is matched
- only against the final component of the filename. Again, remember
- that the algorithm is applied recursively so "full filename" can
+ it() if the pattern contains a / (not counting a trailing /) or a "**"
+ then it is matched against the full filename, including any leading
+ directory. If the pattern doesn't contain a / or a "**", then it is
+ matched only against the final component of the filename. Again,
+ remember that the algorithm is applied recursively so "full filename" can
actually be any portion of a path.
it() if the pattern starts with "+ " (a plus followed by a space)
include/exclude list is reset, removing all previously defined patterns.
)
-The +/- rules are most useful in exclude lists, allowing you to have a
-single exclude list that contains both include and exclude options.
+The +/- rules are most useful in a list that was read from a file, allowing
+you to have a single exclude list that contains both include and exclude
+options.
If you end an exclude list with --exclude '*', note that since the
algorithm is applied recursively that unless you explicitly include
itemize(
it() --exclude "*.o" would exclude all filenames matching *.o
- it() --exclude "/foo" would exclude a file in the base directory called foo
+ it() --exclude "/foo" would exclude a file called foo in the top directory
it() --exclude "foo/" would exclude any directory called foo
it() --exclude "/foo/*/bar" would exclude any file called bar two
- levels below a base directory called foo
+ levels below a directory called foo in the top directory
it() --exclude "/foo/**/bar" would exclude any file called bar two
- or more levels below a base directory called foo
+ or more levels below a directory called foo in the top directory
it() --include "*/" --include "*.c" --exclude "*" would include all
directories and C source files
it() --include "foo/" --include "foo/bar.c" --exclude "*" would include