Documented the change in the --human-readable option.
[rsync/rsync.git] / rsync.yo
index 72e289e..4e61ea6 100644 (file)
--- a/rsync.yo
+++ b/rsync.yo
@@ -378,8 +378,8 @@ to the detailed description below for a complete description.  verb(
      --sockopts=OPTIONS      specify custom TCP options
      --blocking-io           use blocking I/O for the remote shell
      --stats                 give some file-transfer stats
+ -8, --8-bit-output          leave high-bit chars unescaped in output
  -h, --human-readable        output numbers in a human-readable format
-     --si                    like human-readable, but use powers of 1000
      --progress              show progress during transfer
  -P                          same as --partial --progress
  -i, --itemize-changes       output a change-summary for all updates
@@ -690,19 +690,48 @@ quote(itemize(
   it() Existing files (including updated files) retain their existing
   permissions, though the bf(--executability) option might change just
   the execute permission for the file.
-  it() Each new file gets its permissions set based on the source file's
-  permissions, but masked by the receiving end's umask setting (including
-  the stripping of the three special permission bits).
+  it() New files get their "normal" permission bits set to the source
+  file's permissions masked with the receiving end's umask setting, and
+  their special permission bits disabled except in the case where a new
+  directory inherits a setgid bit from its parent directory.
 ))
-  
+
 Thus, when bf(--perms) and bf(--executability) are both disabled,
 rsync's behavior is the same as that of other file-copy utilities,
 such as bf(cp)(1) and bf(tar)(1).
 
+In summary: to give destination files (both old and new) the source
+permissions, use bf(--perms).  To give new files the destination-default
+permissions (while leaving existing files unchanged), make sure that the
+bf(--perms) option is off and use bf(--chmod=ugo=rwX) (which ensures that
+all non-masked bits get enabled).  If you'd care to make this latter
+behavior easier to type, you could define a popt alias for it, such as
+putting this line in the file ~/.popt (this defines the bf(-s) option,
+and includes --no-g to use the default group of the destination dir):
+
+quote(tt(   rsync alias -s --no-p --no-g --chmod=ugo=rwX))
+
+You could then use this new option in a command such as this one:
+
+quote(tt(   rsync -asv src/ dest/))
+
+(Caveat: make sure that bf(-a) does not follow bf(-s), or it will re-enable
+the "--no-*" options.)
+
+The preservation of the destination's setgid bit on newly-created
+directories when bf(--perms) is off was added in rsync 2.6.7.  Older rsync
+versions erroneously preserved the three special permission bits for
+newly-created files when bf(--perms) was off, while overriding the
+destination's setgid bit setting on a newly-created directory.  (Keep in
+mind that it is the version of the receiving rsync that affects this
+behavior.)
+
 dit(bf(-E, --executability)) This option causes rsync to preserve the
 executability (or non-executability) of regular files when bf(--perms) is
 not enabled.  A regular file is considered to be executable if at least one
-'x' is turned on in the source permissions.  
+'x' is turned on in its permissions.  When an existing destination file's
+executability differs from that of the corresponding source file, rsync
+modifies the destination file's permissions as follows:
 
 quote(itemize(
   it() To make a file non-executable, rsync turns off all its 'x'
@@ -798,7 +827,7 @@ to specify items to copy from multiple filesystems, just rsync's recursion
 through the hierarchy of each directory that the user specified, and also
 the analogous recursion on the receiving side during deletion.  Also keep
 in mind that rsync treats a "bind" mount to the same device as being on the
-same filesystem.  
+same filesystem.
 
 If this option is repeated, rsync omits all mount-point directories from
 the copy.  Otherwise, it includes an empty directory at each mount-point it
@@ -1365,12 +1394,22 @@ dit(bf(--stats)) This tells rsync to print a verbose set of statistics
 on the file transfer, allowing you to tell how effective the rsync
 algorithm is for your data.
 
-dit(bf(-h, --human-readable)) Output numbers in a more human-readable format.
-Large numbers may be output in larger units, with a K (1024), M (1024*1024),
-or G (1024*1024*1024) suffix.
+dit(bf(-8, --8-bit-output)) This tells rsync to leave all high-bit characters
+unescaped in the output instead of trying to test them to see if they're
+valid in the current locale and escaping the invalid ones.  All control
+characters (but never tabs) are always escaped, regardless of this option's
+setting.
 
-dit(bf(--si)) Similar to the bf(--human-readable) option, but using powers
-of 1000 instead of 1024.
+The escape idiom that started in 2.6.7 is to output a literal backslash (\)
+and a hash (#), followed by exactly 3 octal digits.  For example, a newline
+would output as "\#012".  A literal backslash that is in a filename is not
+escaped unless it is followed by a hash and 3 digits (0-9).
+
+dit(bf(-h, --human-readable)) Output numbers in a more human-readable format.
+This makes big numbers output using larger units, with a K, M, or G suffix.  If
+this option was specified once, these units are K (1000), M (1000*1000), and
+G (1000*1000*1000); if the option is repeated, the units are powers of 1024
+instead of 1000.
 
 dit(bf(--partial)) By default, rsync will delete any partially
 transferred file if the transfer is interrupted. In some circumstances