--no-option Turn off implied options
For example --archive is a synonym for -recursive --links etc.
follow it with --no-links to not recreate links.
Example: --no-devices, --no-perms have different defaults in various circumstances
Example: --no-whole-file, --no-blocking-io, --no-dirs.
The order of the options is important. The result of
--no--recursive --archive is that --recursive would end up being turned on, the opposite of
--archive --no--recursive.
| --list-only Specify more than one source (explicititly or with wild-card expanded by the shell into multiple args)
for listing, otherwise second source would be intrepreted as the destination.
rsync --list-only uname@Real-World-Systems.com:*.txt # list all txt files on that host's root directory
-rw-r----- 160 2017/05/18 20:31:30 apacheNotes.txt
-rw-r--r-- 1490 2018/10/22 16:57:32 pepper-181022.txt
-rw-r----- 3679 2017/12/29 19:04:47 smacproPart4.txt
rsync --list-only /Volumes/big/*.MOV # list all the MOV files on that volume/dirctory
-rw-r--r-- 308842544 2018/05/16 07:56:53 CamperGrandTour_2064.MOV
-rw-r--r-- 12014106 2018/06/23 15:40:36 DoorClosingWithGap188.MOV
-rw-r--r-- 185538306 2017/02/18 13:29:27 Hummers_0655.MOV
-rw-r--r-- 19434966 2019/01/19 09:28:38 IMG_0332.MOV
--recursive is not effective
| -n --dry-run No transfers, produces a similar report to a real run.
|
-v --verbose
Gives information about files being transferred and a brief summary at the end.
--verbose --verbose Includes files are being skipped,
files over max-size,
hiding file xxx because of pattern x .
Filenames are displayed in --out-format of %n%L by default,
( name and if it is a link, where it points).
No mention is made if a file had its attributes changed.
rsync works silently by default.
| -q --quiet decreases information reported.
Useful when invoking from cron.
Use with --verbose and/or --itemize-changes to see what a command is going to do.
| | options affecting report
|
|---|
-i --itemize-changes
Increases verbosity. Default --out-format='%i %n%L'.
Repeating the option causes unchanged files to be output,.
.d var/
.f var/logPrune.sh
%i string YXcstpoguax, where
Y
| . | item is not being updated (attributes may be modified).
| | | <| file is being sent.
| | | > | file is being received
| | | c change/creation is occurring for
the item (such as the creation of a directory or the changing of a symlink, etc.).
| | | h hard link to another item (requires --hard-links).
| | | * | itemized-output area contains a message (example: "deleting").
| X | file-type
| | f | file | | d| directory | | L | symlink | | D | device | | S | special file (examples: named sockets and fifos).
| | The other letters in the the associated attribute being updated
| .| no change.
| + | new item ++++++++++
| | space | identical item
| ? | unknown attribute
| | Reasons for transfer
| c regular file has a different checksum (requires --checksum) or
symlink, device, or special file has a changed value.
| s | size of a regular file
| t time of last modification (requires --times).
| Ttime of last modification will be set to the transfer time
if a file/symlink/device is updated without --times or
a symlink is changed and the receiver can't set its time.
| p permissions are different (requires --perms).
| o owner is different (requires --owner and super-user privileges).
| g group is different (requires --group and the authority to set the group).
| u future use.
a | ACL (Access Control List) information changed.
| x | extended attribute information changed.
| | | | | | | | | | | | | | | | | | | | | | | |
When deleting files, %i will output the string *deleting.
| --out-format=format | string of field specifiers.
Default with --verbose is %n%L (name and, (if the item is a link) the target).
See "log format" in rsyncd.conf .
Each file, dir, etc. that gets updated in a significant way (a transferred file,
a recreated symlink/device, or a touched directory) will be output.
(e.g. With --itemize-changes the logging of names includes any item changed.
The out-formated string is output prior to a file's transfer.
With transfer-statistic, logging is done at the end of the file's transfer.
When this late logging is in effect and --progress is
specified, the name of the file being transferred is output prior to its progress information followed by the out-format output.
| --log-file=file
For a non-daemon transfer logging with a default %i %n%L.
Example: Remote side logs what is happening:
rsync --archive --verbose --rsync-path="rsync --log-file=rlog" src/ dest/
Useful to diagnose connection closing.
| --log-file-format=format |
"transfer logging" unless the string is empty, then logging is turned off.
See log format in rsyncd.conf .
Default with --log-file %i %n%L i.e. name link.
| -h
--human-readable K, M, or G. units are K (1000), M (1000*1000), and G (1000*1000*1000);
-h -h , units are powers of 1024 .
| --stats output statistics
Number of files: 88417
Number of files transferred: 0
Total file size: 5008416760 bytes
Total transferred file size: 0 bytes
Literal data: 0 bytes
Matched data: 0 bytes
File list size: 2710302
File list generation time: 1.156 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 20
Total bytes received: 2710322
sent 20 bytes received 2710322 bytes 285299.16 bytes/sec
total size is 5008416760 speedup is 1847.89
| --progress Implies --verbose
While transferring a regular file, updates a progress line like :
782448 63% 110.64kB/s 0:00:04
The transfer might finish in :04 seconds
Statistics can be misleading with the delta-transfer algorithm.
For example, if the file is a log previously sent the reported rate will drop dramatically when the receiver gets to the
new data, and the transfer will take much longer to finish than predicted.
When a file transfer finishes, the progress line is replaced with a summary line like :
1238099 100% 146.38kB/s 0:00:08 (xfer#5, to-check=169/396)
This was the 5th regular file transfered, 169 more files for the receiver to check out of the 396 files
|
| Handling file match
|
|---|
| Default: skip files with the same size and modification timestamp.
| -I --ignore-times
| --size-only| Useful when a system which does not preserve timestamps well.
| --modify-window=seconds timestamps considered equal if they differ by no more than the seconds.
Default 0 (exact match).
FAT filesystem represents times with a 2-second resolution --modify-window=1 allows times to differ by up to 1 second.
| -u --update Preserve a destination with a newer modification time.
Does not affect the copying of symlinks or other special files.
| -c --checksum compare checksums for files with matching sizes.
Performance degradation affecting both sides, requires reading all the data in the files.
|
transfer handling
| --append ONLY for files known to "growing", for example logs. Probably inapproiate for transfering entire directories.
No check is made to ensure that the begining of source and destination are the same.
The update occurs inplace.
No transfer occurs if the source file is not larger. The file's attributes ( permissions, ownership, etc.) are not updated.
Does not affect the updating of non-regular files.
Important for transfers which need to be restarted.
| --append-verify --append, only if checksums of the beginning of the files match.
--inplace Writes directly to the destination file.
Without this a tempfile is created and moved when its transfer is complete preserving the previous version in the event of an aborted transfer.
Useful when
- There is insufficient free space on the destination file system to contain the existing file and the new temp version.
- transfers with large files that may to be interrupted.
- transfers include large files with block-based changes or appended data,
- systems are disk bound, not network bound.
Effects:
- During the transfer, file will be inconsistent
-
source files being updated will not be transfered.
-
destination files being read cannot be updated.
- If the transfer is interrupted or fails, file may be left in an inconsistent state
- A file that does not have write permissions can not be updated, and
- The efficiency of the delta-transfer algorithm may be reduced if some data in the destination file is overwritten
before it can be copied to a position later in the file
Combine with --backup, since rsync will use the backup file as the basis file for the transfer to prevent this.
WARNING: Do not use this to update files being accessed by others.
Implies --partial (an interrupted transfer does not delete the file),
Conflicts with --partial-dir and --delay-updates.
| --partial Keep partially transfered file.
Default: delete partially transferred file
| --partial-dir=partdir directory holding partial data, Implies --partial.
If partdir is an absolute path it is consideered an existing working directory.
Do not use an absolute path unless
(1) there are no files in the transfer having the same name (since all the updated files will be put into a single directory )
and
(2) there are no mount points in the hierarchy (the delayed updates will fail if they can't be renamed into place).
If partdir is a relative path, it will be made and excluded preventing sending partdir files on the sending side,
and prevent untimely deletion of partdir files on the receiving side.
An example: the above --partial-dir option would add the equivalent of -f '-p .rsync-partial/'
at the end of any other filter rules.
Add an exclude/hide/protect rule for the partdir to
the auto-added rule may be ineffective at the end of other rules,
To clean-up partdirs,
specify --delete-after and add a "risk" filter rule, eg. -f 'R .rsync-partial/'.
Avoid using --delete-before or --delete-during unless the left-over partdir data is not needed during the current run.)
The partial-dir should not be writable by other users and avoid using /tmp.
Set the partdir to $RSYNC_PARTIAL_DIR. Setting this in $RSYNC_PARTIAL_DIR does not
enable --partial only where partial files go when --partial is specified.
For instance, instead of using --partial-dir=.rsync-tmp along with --progress,
Set $RSYNC_PARTIAL_DIR=.rsync-tmp and then use -P to use that for partial transfers.
--partial does not use this with:
-
--inplace
--delay-updates .
For the purposes of "refuse options" setting, --partial-dir does NOT imply --partial.
a refusal of --partial can be used to disallow the
overwriting of destination files with a partial transfer, while still allowing the safer idiom provided by --partial-dir.
If --whole-file is specified (or implied), partial-dir files are removed.
-P equivalent to --partial --progress. Useful for a long transfer that may be interrupted.
| --delay-updates puts the temporary file in
a holding directory until the end of the transfer, then all the files are moved into place
in an attempt to make the updating of the files more atomic.
By default the files are placed into .~tmp~/ in each file's destination directory.
Change the directory with --partial-dir.
Conflicts with --inplace and --append.
Requires enough free disk space to hold an additional copy of all the updated files.
See the "atomic-rsync" perl script in the "support" subdir
for an update algorithm that is more atomic (it uses --link-dest and a parallel hierarchy of files).
| -W --whole-file delta-transfer is not used.
The transfer may be faster if this option is used when the bandwidth between the
source and destination machines is higher than the bandwidth to
disk (example: when the "disk" is actually a networked filesystem).
Default when source and destination are local paths, if no batch writing option is in effect.
| -S --sparse Handle sparse files efficiently so they take up less space on the destination.
Conflicts with --inplace.
|
| -R --relative Use relative paths.
The full path names specified on the command line are sent to the server rather than just the last parts of the filenames.
Useful when sending several different directories at the same time.
For example:> rsync -av /foo/bar/baz.c remote:/tmp/
Creates /tmp/baz.c.
> rsync -avR /foo/bar/baz.c remote:/tmp/
creates /tmp/foo/bar/baz.c preserving its full path.
These extra path elements are called "implied directories" ("foo" and the "foo/bar" directories in the above example).
rsync sends these implied directories as real directories in the file list, even if a path
element is really a symlink on the sending side. This prevents
unexpected behaviors when copying the full path of a file that you didn't realize had a symlink in its path.
To duplicate a server-side symlink, include both the symlink via its path, and referent directory via its real path.
To limit the amount of path information sent as implied directories for each path, insert a dot and a slash into the source path.
>rsync -avR /foo/./bar/baz.c remote:/tmp/
Creates /tmp/bar/baz.c on the remote machine. (Note that the dot must be followed by a slash, so "/foo/." would not
| --no-implied-dirs affects the default behavior of --relative .
The attributes of the implied directories from the source names are not included in the transfer.
This means that the corresponding path elements on the destination system are left unchanged if they exist, and any
missing implied directories are created with default attributes.
This allows these implied path elements to have big differences, such as being a symlink to a directory on the receiving side.
For instance, if a command-line arg or a files-from entry told rsync to transfer the file "path/foo/file", the directories
"path" and "path/foo" are implied when --relative is used. If "path/foo" is a symlink to "bar" on the destination system, the
receiving rsync would ordinarily delete "path/foo", recreate it as a directory, and receive the file into the new directory.
With --no-implied-dirs, the receiving rsync updates "path/foo/file" using the existing path elements, which means
that the file ends up being created in "path/bar".
Another way to accomplish this link preservation is to use the
--keep-dirlinks option (which will also affect symlinks to directories in the rest of the transfer).
| -b --backup Existing destination files are renamed before
files are transferred or deleted.
(watch free space on destination).
| --backup-dir =DIR With --backup store all backups in DIR on
the receiving side. This can be used for incremental backups.
| --suffix=suffix if no --backup-dir was specified Default suffix is ~
with --backup-dir no suffix is appended by default.
without --backup-dir,
-
--omit-dir-times is implied, and
- if
--delete is in effect (without --delete-excluded), rsync will add a
"protect" filter-rule for the backup suffix to the end of all existing excludes (e.g. -f "P *~").
Prevents previously backed-up files from being deleted.
With filter rules, insert own exclude/protect rule higher up in the
list so that it has a high enough priority to be effective (e.g., if your rules specify a trailing inclusion/exclusion of
'*', the auto-added rule would never be reached).
| -d --dirs
Tell the sending side to include any directories that are encountered. Unlike --recursive, a directory's contents are not
copied unless the directory name specified is "." or ends with a trailing slash (e.g. ".", "dir/.", "dir/", etc.). Without this
option or --recursive , rsync will skip all directories it encounters (and output a message to that effect for each
one).
Specifing both --dirs and --recursive, --recursive takes precedence.
--dirs is implied by --files-from or --list-only (including an implied --list-only usage) if
wasn't specified (so that directories are seen in the listing).
Specify --no-dirs to turn this off.
Link handling skip to attribute handling
| -l --links recreate symlinks on the destination.
| -L --copy-links for symlinks, the item that they point to (the referent) is copied.
| --copy-unsafe-links copy the referent of symlinks that point outside the copied tree.
Absolute symlinks are treated like ordinary files, and as are symlinks in the source path itself when --relative is used.
Has no additional effect if --copy-links was also specified.
| --safe-links ignore any symbolic links which point outside the copied tree and absolute symlinks
With --relative may give unexpected results.
| -k --copy-dirlinks sending side treats a symlink to a
directory as though it were a real directory.
Useful if you don't want symlinks to non-directories to be affected, as they would be using --copy-links.
Without this , if the sending side has replaced a directory with a symlink to a directory, the receiving side will
delete anything that is in the way of the new symlink, including a directory hierarchy (as long as --force or --delete is in effect).
See --keep-dirlinks for an analogous option for the receiving side.
| -K --keep-dirlinks receiving side treats a symlink to a
directory as though it were a real directory, only if it matches a real directory from the sender.
Without this the receiver's symlink would be deleted and replaced with a real directory.
For example, transfer a directory "foo" that contains a file "file", but "foo" is a symlink to directory "bar" on the receiver.
Without --keep-dirlinks, the receiver deletes symlink "foo", recreates it as a directory, and receives the file into the new directory.
With --keep-dirlinks, the receiver keeps the symlink and "file" ends up in "bar".
caution: when using --keep-dirlinks, you must trust all the symlinks in the copy!
If it is possible for an untrusted user to create their own symlink to any directory, the user could then (on a subsequent copy)
replace the symlink with a real directory and affect the content of whatever directory the symlink references.
For backup copies, use a bind mount instead of a symlink to modify your receiving hierarchy.
See also --copy-dirlinks for an analogous option for the sending side.
| -H --hard-links hard-linked files in the transfer are linked to the corresponding files on the receiving side.
Without this option, hard-linked files in the transfer are treated as though they were separate files.
When updating a non-empty destination, ensures that files that are hard-linked together on the source
are hard-linked together on the destination.
Does NOT break existing hard links on the destination that do not exist between the source files.
If one or more extra-linked files have content changes, they will become unlinked when updated
(if not using --inplace ).
Rsync can only detect hard links between files that are in the transfer set. If rsync updates a file that has
extra hard-link connections to files outside the transfer, that linkage will be broken.
Using --inplace to avoid this breakage, there may be
unintended changes due to lingering hard links (see --inplace ).
If incremental recursion is active rsync may
transfer a missing hard-linked file before it finds that another link for that contents exists elsewhere in the hierarchy.
This does not affect the accuracy of the transfer, just its efficiency,
To avoid this disable incremental recursion with --no-inc-recursive
|
Attributes, Meta-data, i.e. file permissions, Access Control Lists, owner, group …
| -p --perms set the destination permissions to be the same as the source permissions.
See --chmod to modify what are considered to be the source permissions.
With --no--perms:
Existing files retain permissions, ( --executability might change the execute permission.)
New files Have access permissions set to the source permissions masked with the receiving
directory's default permissions (either the receiving process's umask, or
the permissions specified via the destination directory's default AccessControlList.
Special mod bits are disabled except where a new directory inherits setgid from its parent.
To give new files the destination-default permissions (while leaving existing files
unchanged), use --no--perm and --chmod=ugo=rwX
rsync alias --compress --no--perms --no--group --chmod=ugo=rwX
then use : rsync -avZ src/ dest/
--chmod apply comma-separated chmod strings to the permission of the files in the transfer.
as if they were the permissions supplied by the sender.
Can seem to have no effect on existing files if --perms is not enabled.
An item that should only apply to a directory is prefixed with D', or to a file if prefixed with 'F'.
For example:
--chmod=Dg+s,ug+w,Fo-w,+X
Multiple --chmods are permitted.
See --perms and --executability for how the resulting permission value can be applied to the files in the transfer.
| -E --executability preserve the executability (or nonexecutability) of regular files when --perms is not enabled.
A regular file is considered to be executable if at least one '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:
To make a file non-executable, rsync turns off all its 'x' permissions.
To make a file executable, rsync turns on each 'x' permission that has a corresponding 'r' permission enabled.
-A --acls update the ACLs, implies --perms.
See --fake-super to backup and restore ACLs that are not compatible.
| -X --xattrs update the remote extended attributes.
When done by super-user, copies all namespaces except system.*.
A normal user only copies the user.* namespace.
To to backup and restore non-user namespaces as a normal user, see --fake-super .
| -o --owner Preserve owner (other than receiving user)
Default: the owner is set to the user on the receiving side.
only if the receiver is super-user (see --super and --fake-super ).
Caution: The preservation of ownership will associate matching names but if it falls back to using the ID number (see --numeric-ids it will surely be incorrect!!.
| -g --groupPreserve group
If the receiving program is not running as the super-user (or if --no-super was specified),
only groups that the invoking user on the receiving side is a member of will be preserved.
Without this option, the group is set to the default group of the invoking user on the receiving side.
The preservation of group information will associate matching
names by default, but may fall back to using the ID number
| -t --times preserve modification times (implied with --archive).
If times are not preserved (in addition to corrupting the modification time on the destination) the next time a transfer is performed,
the evaluation which excludes files that have not been modified will be incorrect. The deltatransfer algorithm will minimize the update.
| -O --omit-dir-times omit directories when preserving modification times (see --times).
Suggested if NFS is sharing the directories on the receiving side.
Implied with --backup without --backup-dir.
| |
| --super receiving side attempts to execute super-user activities even if it wasn't run by the super-user.
Include: preserving users via the --owner option,
preserving all groups (not just the current user's groups) via --groups , and
copying devices via --devices .
Useful for systems that allow such activities without being the super-user and
ensuring errors if the receiving side isn't being run as the super-user.
To turn off super-user activities, the super-user can use --no-super.
| --fake-super simulate super-user activities by saving/restoring the privileged attributes via special extended attributes.
Includes the file's owner and group (if it is not the default), the file's device info (device & special files are
created as empty text files), and any permission bits that won't be allowed to be set on the real file (e.g. the real file gets
u-s,g-s,o-t for safety) or that would limit the owner's access
(since the real super-user can always access/change a file, the
files we create can always be accessed/changed by the creating user).
Handles ACLs (if --acls was specified) and non-user extended attributes (if --xattrs was specified).
backup data without using a super-user, and to store ACLs from incompatible systems.
Only affects the side where the option is used. To affect the remote side of a remote-shell connection, specify an rsync path:
rsync -av --rsync-path="rsync --fake-super" /src/ host:/dest/
There is only one "side" in a local copy, this affects both the sending and receiving of files.
Specify a copy using "localhost" to avoid this, possibly using the lsh shell script (from the support directory)
as a substitute for an actual remote shell (see --rsh).
overridden by both --super and --no-super.
See fake super in rsyncd.conf.
| -x --one-file-system avoid crossing a filesystem boundary when recursing.
This does not limit the ability 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.
A "bind" mount to the same device is considered being on the same filesystem.
If repeated, rsync omits all mount-point directories.
Otherwise, it includes an empty directory at each mount-point it encounters (using the attributes of the
mounted directory because those of the underlying mount-point directory are inaccessible).
If collapse symlinks (via --copy-links or --copy-unsafe-links), a symlink to a directory on another device
is treated like a mount-point. Symlinks to non-directories are unaffected by this option.
| --existing, --ignore-non-existing skip creating files and directories
that do not exist on the destination.
If combined with the --ignore-existing , no files will be updated (useful to delete extraneous files).
This is a transfer rule, not an exclude, it doesn't affect the data that goes into the file-lists, and thus it
doesn't affect deletions. It just limits the files that the receiver requests to be transferred.
| --ignore-existing skip updating files that already exist on
the destination (this does NOT ignore existing directories, or nothing would get done). See also --existing.
This is a transfer rule, not an exclude, so it doesn't affect the data that goes into the file-lists, and doesn't affect deletions.
It limits the files that the receiver requests to be transferred.
Useful for doing backups using --link-dest when continung a n interrupted backup.
Since a --link-dest run is copied into a new directory hierarchy (when it is used properly),
using --ignore existing will ensure that the already-handled files don't get
tweaked (which avoids a change in permissions on the hard-linked files).
This does mean that this option is only looking at the existing files in the destination hierarchy itself.
| | Deleting Files on the receiving side
|
|---|
This occurs when files on the sending side are deleted or moved to a different directory.
If this run is expected to be a backup, this results with files deleted locally will not be recoverable.
| --delete For directories being synchronized
(i.e. updating those previously sent using dir or dir/ )
files no longer on the sending side are deleted from the receiving side.
(Not effective for files using a wildcard for the directory's contents which was expanded to a list of files.)
excluded files are not deleted unless --delete-excluded
or mark the rules as only matching on the sending side
See include/exclude modifiers .
Deletions will also occur when --dirs is enabled for directories whose contents are being copied.
Including --dry-run shows files that would be deleted without deleting them.
--delete-during(default)
--delete-before
--delete-after
--delete-delay May be a better choice than after)
--prune-empty-dirs, and --delay-updates.
(use --del --delete-during to request this deletion mode explicitly).
Incremental recursion can be disabled using --no-inc-recursive.
If the sending side detects I/O errors, deletion of any files will be disabled,
useful with NFS errors on the sending side)
May be combined with one of the --delete-when as well as --delete-excluded.
See --delete-delay and --delete-after.
| --delete-before Deletions are done before any transfer .
See --delete.
Helpful when the destination filesystem is low on space.
Introduces a delay before the start of the transfer which might cause the transfer to timeout
Forces non-incremental recursion that requires a scan of the files for the transfer into memory at once
(see --recursive).
|
--delete-during
--del deletions are done as the transfer occurs.
The per-directory delete scan is done before each directory is checked for updates
| --delete-delay File deletions are done after the transfer.
Useful when combined with --delay-updates and/or --fuzzy, and is more efficient
than using --delete-after
(can behave differently, since --delete-after computes the deletions in a separate pass after all updates are done).
If the number of removed files is very large
--delete-after (unless --recursive is doing an incremental scan).
See --delete.
| --delete-after file deletions are done after the transfer has completed.
Useful when sending new per-directory merge files as a part of the transfer and
you want their exclusions to take effect for the delete phase of the current transfer.
Forces non-incremental recursion that requires scanning all the file names in the transfer into memory at once.
| --delete-excluded|
Include deleting files on the receiving side that are excluded.
See the FILTER RULES section for a way to make individual exclusions behave this way on the receiver, and for a way to protect
files from --delete-excluded
| --force| Delete a directory when it is to be replaced by a file,
even if the directory contains files. Only relevant if deletions are not active (see --delete for details).
| --ignore-errors --delete deletes files even when there are I/O errors.Danger
| --max-delete=N| MAXimun number of files or directories deleted, once exceeded
exit with an error code 25 .
--max-delete=0 warning without removing
| --remove-source-files|
Remove from the sending side files successfully MOVED .
| |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |