Index of Section 1 Manual Pages
| Interix / SUA | rsync.1 | Interix / SUA |
rsync(1) rsync(1)
NAME
rsync -- a fast, versatile, remote (and local) file-copy-
ing tool
SYNOPSIS
Local: rsync [OPTION...] SRC... [DEST]
Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
Access via rsync daemon:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
Usages with just one SRC arg and no DEST arg will list the
source files instead of copying.
DESCRIPTION
Rsync is a fast and extraordinarily versatile file copying
tool. It can copy locally, to/from another host over any
remote shell, or to/from a remote rsync daemon. It offers
a large number of options that control every aspect of its
behavior and permit very flexible specification of the set
of files to be copied. It is famous for its delta-trans-
fer algorithm, which reduces the amount of data sent over
the network by sending only the differences between the
source files and the existing files in the destination.
Rsync is widely used for backups and mirroring and as an
improved copy command for everyday use.
Rsync finds files that need to be transferred using a
"quick check" algorithm (by default) that looks for files
that have changed in size or in last-modified time. Any
changes in the other preserved attributes (as requested by
options) are made on the destination file directly when
the quick check indicates that the file's data does not
need to be updated.
Some of the additional features of rsync are:
o support for copying links, devices, owners, groups,
and permissions
o exclude and exclude-from options similar to GNU tar
o a CVS exclude mode for ignoring the same files that
CVS would ignore
o can use any transparent remote shell, including ssh
or rsh
o does not require super-user privileges
o pipelining of file transfers to minimize latency
costs
o support for anonymous or authenticated rsync dae-
mons (ideal for mirroring)
GENERAL
Rsync copies files either to or from a remote host, or
locally on the current host (it does not support copying
files between two remote hosts).
There are two different ways for rsync to contact a remote
system: using a remote-shell program as the transport
(such as ssh or rsh) or contacting an rsync daemon
directly via TCP. The remote-shell transport is used
whenever the source or destination path contains a single
colon (:) separator after a host specification. Contact-
ing an rsync daemon directly happens when the source or
destination path contains a double colon (::) separator
after a host specification, OR when an rsync:// URL is
specified (see also the "USING RSYNC-DAEMON FEATURES VIA A
REMOTE-SHELL CONNECTION" section for an exception to this
latter rule).
As a special case, if a single source arg is specified
without a destination, the files are listed in an output
format similar to "ls -l".
As expected, if neither the source or destination path
specify a remote host, the copy occurs locally (see also
the --list-only option).
Rsync refers to the local side as the "client" and the
remote side as the "server". Don't confuse "server" with
an rsync daemon -- a daemon is always a server, but a
server can be either a daemon or a remote-shell spawned
process.
SETUP
See the file README for installation instructions.
Once installed, you can use rsync to any machine that you
can access via a remote shell (as well as some that you
can access using the rsync daemon-mode protocol). For
remote transfers, a modern rsync uses ssh for its communi-
cations, but it may have been configured to use a differ-
ent remote shell by default, such as rsh or remsh.
You can also specify any remote shell you like, either by
using the -e command line option, or by setting the
RSYNC_RSH environment variable.
Note that rsync must be installed on both the source and
destination machines.
USAGE
You use rsync in the same way you use rcp. You must spec-
ify a source and a destination, one of which may be
remote.
Perhaps the best way to explain the syntax is with some
examples:
rsync -t *.c foo:src/
This would transfer all files matching the pattern *.c
from the current directory to the directory src on the
machine foo. If any of the files already exist on the
remote system then the rsync remote-update protocol is
used to update the file by sending only the differences.
See the tech report for details.
rsync -avz foo:src/bar /data/tmp
This would recursively transfer all files from the direc-
tory src/bar on the machine foo into the /data/tmp/bar
directory on the local machine. The files are transferred
in "archive" mode, which ensures that symbolic links,
devices, attributes, permissions, ownerships, etc. are
preserved in the transfer. Additionally, compression will
be used to reduce the size of data portions of the trans-
fer.
rsync -avz foo:src/bar/ /data/tmp
A trailing slash on the source changes this behavior to
avoid creating an additional directory level at the desti-
nation. You can think of a trailing / on a source as
meaning "copy the contents of this directory" as opposed
to "copy the directory by name", but in both cases the
attributes of the containing directory are transferred to
the containing directory on the destination. In other
words, each of the following commands copies the files in
the same way, including their setting of the attributes of
/dest/foo:
rsync -av /src/foo /dest
rsync -av /src/foo/ /dest/foo
Note also that host and module references don't require a
trailing slash to copy the contents of the default direc-
tory. For example, both of these copy the remote direc-
tory's contents into "/dest":
rsync -av host: /dest
rsync -av host::module /dest
You can also use rsync in local-only mode, where both the
source and destination don't have a `:' in the name. In
this case it behaves like an improved copy command.
Finally, you can list all the (listable) modules available
from a particular rsync daemon by leaving off the module
name:
rsync somehost.mydomain.com::
See the following section for more details.
ADVANCED USAGE
The syntax for requesting multiple files from a remote
host is done by specifying additional remote-host args in
the same style as the first, or with the hostname omitted.
For instance, all these work:
rsync -av host:file1 :file2 host:file{3,4} /dest/
rsync -av host::modname/file{1,2} host::mod-
name/file3 /dest/
rsync -av host::modname/file1 ::modname/file{3,4}
Older versions of rsync required using quoted spaces in
the SRC, like these examples:
rsync -av host:'dir1/file1 dir2/file2' /dest
rsync host::'modname/dir1/file1 modname/dir2/file2'
/dest
This word-splitting still works (by default) in the latest
rsync, but is not as easy to use as the first method.
If you need to transfer a filename that contains whites-
pace, you can either specify the --protect-args (-s)
option, or you'll need to escape the whitespace in a way
that the remote shell will understand. For instance:
rsync -av host:'file\ name\ with\ spaces' /dest
CONNECTING TO AN RSYNC DAEMON
It is also possible to use rsync without a remote shell as
the transport. In this case you will directly connect to
a remote rsync daemon, typically using TCP port 873.
(This obviously requires the daemon to be running on the
remote system, so refer to the STARTING AN RSYNC DAEMON TO
ACCEPT CONNECTIONS section below for information on that.)
Using rsync in this way is the same as using it with a
remote shell except that:
o you either use a double colon :: instead of a sin-
gle colon to separate the hostname from the path,
or you use an rsync:// URL.
o the first word of the "path" is actually a module
name.
o the remote daemon may print a message of the day
when you connect.
o if you specify no path name on the remote daemon
then the list of accessible paths on the daemon
will be shown.
o if you specify no local destination then a listing
of the specified files on the remote daemon is pro-
vided.
o you must not specify the --rsh (-e) option.
An example that copies all the files in a remote module
named "src":
rsync -av host::src /dest
Some modules on the remote daemon may require authentica-
tion. If so, you will receive a password prompt when you
connect. You can avoid the password prompt by setting the
environment variable RSYNC_PASSWORD to the password you
want to use or using the --password-file option. This may
be useful when scripting rsync.
WARNING: On some systems environment variables are visible
to all users. On those systems using --password-file is
recommended.
You may establish the connection via a web proxy by set-
ting the environment variable RSYNC_PROXY to a host-
name:port pair pointing to your web proxy. Note that your
web proxy's configuration must support proxy connections
to port 873.
You may also establish a daemon connection using a program
as a proxy by setting the environment variable RSYNC_CON-
NECT_PROG to the commands you wish to run in place of mak-
ing a direct socket connection. The string may contain
the escape "%H" to represent the hostname specified in the
rsync command (so use "%%" if you need a single "%" in
your string). For example:
export RSYNC_CONNECT_PROG='ssh proxyhost nc %H 873'
rsync -av targethost1::module/src/ /dest/
rsync -av rsync:://targethost2/module/src/ /dest/
The command specified above uses ssh to run nc (netcat) on
a proxyhost, which forwards all data to port 873 (the
rsync daemon) on the targethost (%H).
USING RSYNC-DAEMON FEATURES VIA A REMOTE-SHELL CONNECTION
It is sometimes useful to use various features of an rsync
daemon (such as named modules) without actually allowing
any new socket connections into a system (other than what
is already required to allow remote-shell access). Rsync
supports connecting to a host using a remote shell and
then spawning a single-use "daemon" server that expects to
read its config file in the home dir of the remote user.
This can be useful if you want to encrypt a daemon-style
transfer's data, but since the daemon is started up fresh
by the remote user, you may not be able to use features
such as chroot or change the uid used by the daemon. (For
another way to encrypt a daemon transfer, consider using
ssh to tunnel a local port to a remote machine and config-
ure a normal rsync daemon on that remote host to only
allow connections from "localhost".)
From the user's perspective, a daemon transfer via a
remote-shell connection uses nearly the same command-line
syntax as a normal rsync-daemon transfer, with the only
exception being that you must explicitly set the remote
shell program on the command-line with the --rsh=COMMAND
option. (Setting the RSYNC_RSH in the environment will
not turn on this functionality.) For example:
rsync -av --rsh=ssh host::module /dest
If you need to specify a different remote-shell user, keep
in mind that the user@ prefix in front of the host is
specifying the rsync-user value (for a module that
requires user-based authentication). This means that you
must give the '-l user' option to ssh when specifying the
remote-shell, as in this example that uses the short ver-
sion of the --rsh option:
rsync -av -e "ssh -l ssh-user" rsync-user@host::module /dest
The "ssh-user" will be used at the ssh level; the "rsync-
user" will be used to log-in to the "module".
STARTING AN RSYNC DAEMON TO ACCEPT CONNECTIONS
In order to connect to an rsync daemon, the remote system
needs to have a daemon already running (or it needs to
have configured something like inetd to spawn an rsync
daemon for incoming connections on a particular port).
For full information on how to start a daemon that will
handling incoming socket connections, see the
rsyncd.conf(5) man page -- that is the config file for the
daemon, and it contains the full details for how to run
the daemon (including stand-alone and inetd configura-
tions).
If you're using one of the remote-shell transports for the
transfer, there is no need to manually start an rsync dae-
mon.
EXAMPLES
Here are some examples of how I use rsync.
To backup my wife's home directory, which consists of
large MS Word files and mail folders, I use a cron job
that runs
rsync -Cavz . arvidsjaur:backup
each night over a PPP connection to a duplicate directory
on my machine "arvidsjaur".
To synchronize my samba source trees I use the following
Makefile targets:
get:
rsync -avuzb --exclude '*~' samba:samba/ .
put:
rsync -Cavuzb . samba:samba/
sync: get put
this allows me to sync with a CVS directory at the other
end of the connection. I then do CVS operations on the
remote machine, which saves a lot of time as the remote
CVS protocol isn't very efficient.
I mirror a directory between my "old" and "new" ftp sites
with the command:
rsync -az -e ssh --delete ~ftp/pub/samba nim-
bus:"~ftp/pub/tridge"
This is launched from cron every few hours.
OPTIONS SUMMARY
Here is a short summary of the options available in rsync.
Please refer to the detailed description below for a com-
plete description.
-v, --verbose increase verbosity
-q, --quiet suppress non-error messages
--no-motd suppress daemon-mode MOTD (see caveat)
-c, --checksum skip based on checksum, not mod-time & size
-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
--no-OPTION turn off an implied OPTION (e.g. --no-D)
-r, --recursive recurse into directories
-R, --relative use relative path names
--no-implied-dirs don't send implied dirs with --relative
-b, --backup make backups (see --suffix & --backup-dir)
--backup-dir=DIR make backups into hierarchy based in DIR
--suffix=SUFFIX backup suffix (default ~ w/o --backup-dir)
-u, --update skip files that are newer on the receiver
--inplace update destination files in-place
--append append data onto shorter files
--append-verify --append w/old data in file checksum
-d, --dirs transfer directories without recursing
-l, --links copy symlinks as symlinks
-L, --copy-links transform symlink into referent file/dir
--copy-unsafe-links only "unsafe" symlinks are transformed
--safe-links ignore symlinks that point outside the tree
-k, --copy-dirlinks transform symlink to dir into referent dir
-K, --keep-dirlinks treat symlinked dir on receiver as dir
-H, --hard-links preserve hard links
-p, --perms preserve permissions
-E, --executability preserve executability
--chmod=CHMOD affect file and/or directory permissions
-A, --acls preserve ACLs (implies -p)
-X, --xattrs preserve extended attributes
-o, --owner preserve owner (super-user only)
-g, --group preserve group
--devices preserve device files (super-user only)
--specials preserve special files
-D same as --devices --specials
-t, --times preserve modification times
-O, --omit-dir-times omit directories from --times
--super receiver attempts super-user activities
--fake-super store/recover privileged attrs using xattrs
-S, --sparse handle sparse files efficiently
-n, --dry-run perform a trial run with no changes made
-W, --whole-file copy files whole (w/o delta-xfer algorithm)
-x, --one-file-system don't cross filesystem boundaries
-B, --block-size=SIZE force a fixed checksum block-size
-e, --rsh=COMMAND specify the remote shell to use
--rsync-path=PROGRAM specify the rsync to run on remote machine
--existing skip creating new files on receiver
--ignore-existing skip updating files that exist on receiver
--remove-source-files sender removes synchronized files (non-dir)
--del an alias for --delete-during
--delete delete extraneous files from dest dirs
--delete-before receiver deletes before transfer (default)
--delete-during receiver deletes during xfer, not before
--delete-delay find deletions during, delete after
--delete-after receiver deletes after transfer, not before
--delete-excluded also delete excluded files from dest dirs
--ignore-errors delete even if there are I/O errors
--force force deletion of dirs even if not empty
--max-delete=NUM don't delete more than NUM files
--max-size=SIZE don't transfer any file larger than SIZE
--min-size=SIZE don't transfer any file smaller than SIZE
--partial keep partially transferred files
--partial-dir=DIR put a partially transferred file into DIR
--delay-updates put all updated files into place at end
-m, --prune-empty-dirs prune empty directory chains from file-list
--numeric-ids don't map uid/gid values by user/group name
--timeout=SECONDS set I/O timeout in seconds
--contimeout=SECONDS set daemon connection timeout in seconds
-I, --ignore-times don't skip files that match size and time
--size-only skip files that match in size
--modify-window=NUM compare mod-times with reduced accuracy
-T, --temp-dir=DIR create temporary files in directory DIR
-y, --fuzzy find similar file for basis if no dest file
--compare-dest=DIR also compare received files relative to DIR
--copy-dest=DIR ... and include copies of unchanged files
--link-dest=DIR hardlink to files in DIR when unchanged
-z, --compress compress file data during the transfer
--compress-level=NUM explicitly set compression level
--skip-compress=LIST skip compressing files with suffix in LIST
-C, --cvs-exclude auto-ignore files in the same way CVS does
-f, --filter=RULE add a file-filtering RULE
-F same as --filter='dir-merge /.rsync-filter'
repeated: --filter='- .rsync-filter'
--exclude=PATTERN exclude files matching PATTERN
--exclude-from=FILE read exclude patterns from FILE
--include=PATTERN don't exclude files matching PATTERN
--include-from=FILE read include patterns from FILE
--files-from=FILE read list of source-file names from FILE
-0, --from0 all *from/filter files are delimited by 0s
-s, --protect-args no space-splitting; wildcard chars only
--address=ADDRESS bind address for outgoing socket to daemon
--port=PORT specify double-colon alternate port number
--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
--progress show progress during transfer
-P same as --partial --progress
-i, --itemize-changes output a change-summary for all updates
--out-format=FORMAT output updates using the specified FORMAT
--log-file=FILE log what we're doing to the specified FILE
--log-file-format=FMT log updates using the specified FMT
--password-file=FILE read daemon-access password from FILE
--list-only list the files instead of copying them
--bwlimit=KBPS limit I/O bandwidth; KBytes per second
--write-batch=FILE write a batched update to FILE
--only-write-batch=FILE like --write-batch but w/o updating dest
--read-batch=FILE read a batched update from FILE
--protocol=NUM force an older protocol version to be used
--iconv=CONVERT_SPEC request charset conversion of filenames
--checksum-seed=NUM set block/file checksum seed (advanced)
-4, --ipv4 prefer IPv4
-6, --ipv6 prefer IPv6
--version print version number
(-h) --help show this help (see below for -h comment)
Rsync can also be run as a daemon, in which case the fol-
lowing options are accepted:
--daemon run as an rsync daemon
--address=ADDRESS bind to the specified address
--bwlimit=KBPS limit I/O bandwidth; KBytes per second
--config=FILE specify alternate rsyncd.conf file
--no-detach do not detach from the parent
--port=PORT listen on alternate port number
--log-file=FILE override the "log file" setting
--log-file-format=FMT override the "log format" setting
--sockopts=OPTIONS specify custom TCP options
-v, --verbose increase verbosity
-4, --ipv4 prefer IPv4
-6, --ipv6 prefer IPv6
-h, --help show this help (if used after --daemon)
OPTIONS
rsync uses the GNU long options package. Many of the com-
mand line options have two variants, one short and one
long. These are shown below, separated by commas. Some
options only have a long variant. The `=' for options
that take a parameter is optional; whitespace can be used
instead.
--help Print a short help page describing the options
available in rsync and exit. For backward-compati-
bility with older versions of rsync, the help will
also be output if you use the -h option without any
other args.
--version
print the rsync version number and exit.
-v, --verbose
This option increases the amount of information you
are given during the transfer. By default, rsync
works silently. A single -v will give you informa-
tion about what files are being transferred and a
brief summary at the end. Two -v options will give
you information on what files are being skipped and
slightly more information at the end. More than two
-v options should only be used if you are debugging
rsync.
Note that the names of the transferred files that
are output are done using a default --out-format of
"%n%L", which tells you just the name of the file
and, if the item is a link, where it points. At
the single -v level of verbosity, this does not
mention when a file gets its attributes changed.
If you ask for an itemized list of changed
attributes (either --itemize-changes or adding "%i"
to the --out-format setting), the output (on the
client) increases to mention all items that are
changed in any way. See the --out-format option
for more details.
-q, --quiet
This option decreases the amount of information you
are given during the transfer, notably suppressing
information messages from the remote server. This
option is useful when invoking rsync from cron.
--no-motd
This option affects the information that is output
by the client at the start of a daemon transfer.
This suppresses the message-of-the-day (MOTD) text,
but it also affects the list of modules that the
daemon sends in response to the "rsync host::"
request (due to a limitation in the rsync proto-
col), so omit this option if you want to request
the list of modules from the daemon.
-I, --ignore-times
Normally rsync will skip any files that are already
the same size and have the same modification times-
tamp. This option turns off this "quick check"
behavior, causing all files to be updated.
--size-only
This modifies rsync's "quick check" algorithm for
finding files that need to be transferred, changing
it from the default of transferring files with
either a changed size or a changed last-modified
time to just looking for files that have changed in
size. This is useful when starting to use rsync
after using another mirroring system which may not
preserve timestamps exactly.
--modify-window
When comparing two timestamps, rsync treats the
timestamps as being equal if they differ by no more
than the modify-window value. This is normally 0
(for an exact match), but you may find it useful to
set this to a larger value in some situations. In
particular, when transferring to or from an MS Win-
dows FAT filesystem (which represents times with a
2-second resolution), --modify-window=1 is useful
(allowing times to differ by up to 1 second).
-c, --checksum
This changes the way rsync checks if the files have
been changed and are in need of a transfer. With-
out this option, rsync uses a "quick check" that
(by default) checks if each file's size and time of
last modification match between the sender and
receiver. This option changes this to compare a
128-bit MD4 checksum for each file that has a
matching size. Generating the checksums means that
both sides will expend a lot of disk I/O reading
all the data in the files in the transfer (and this
is prior to any reading that will be done to trans-
fer changed files), so this can slow things down
significantly.
The sending side generates its checksums while it
is doing the file-system scan that builds the list
of the available files. The receiver generates its
checksums when it is scanning for changed files,
and will checksum any file that has the same size
as the corresponding sender's file: files with
either a changed size or a changed checksum are
selected for transfer.
Note that rsync always verifies that each trans-
ferred file was correctly reconstructed on the
receiving side by checking a whole-file checksum
that is generated as the file is transferred, but
that automatic after-the-transfer verification has
nothing to do with this option's before-the-
transfer "Does this file need to be updated?"
check.
-a, --archive
This is equivalent to -rlptgoD. It is a quick way
of saying you want recursion and want to preserve
almost everything (with -H being a notable omis-
sion). The only exception to the above equivalence
is when --files-from is specified, in which case -r
is not implied.
Note that -a does not preserve hardlinks, because
finding multiply-linked files is expensive. You
must separately specify -H.
--no-OPTION
You may turn off one or more implied options by
prefixing the option name with "no-". Not all
options may be prefixed with a "no-": only options
that are implied by other options (e.g. --no-D,
--no-perms) or have different defaults in various
circumstances (e.g. --no-whole-file, --no-block-
ing-io, --no-dirs). You may specify either the
short or the long option name after the "no-" pre-
fix (e.g. --no-R is the same as --no-relative).
For example: if you want to use -a (--archive) but
don't want -o (--owner), instead of converting -a
into -rlptgD, you could specify -a --no-o (or -a
--no-owner).
The order of the options is important: if you
specify --no-r -a, the -r option would end up being
turned on, the opposite of -a --no-r. Note also
that the side-effects of the --files-from option
are NOT positional, as it affects the default state
of several options and slightly changes the meaning
of -a (see the --files-from option for more
details).
-r, --recursive
This tells rsync to copy directories recursively.
See also --dirs (-d).
Beginning with rsync 3.0.0, the recursive algorithm
used is now an incremental scan that uses much less
memory than before and begins the transfer after
the scanning of the first few directories have been
completed. This incremental scan only affects our
recursion algorithm, and does not change a non-
recursive transfer. It is also only possible when
both ends of the transfer are at least version
3.0.0.
Some options require rsync to know the full file
list, so these options disable the incremental
recursion mode. These include: --delete-before,
--delete-after, --prune-empty-dirs, and
--delay-updates. Because of this, the default
delete mode when you specify --delete is now
--delete-during when both ends of the connection
are at least 3.0.0 (use --del or --delete-during to
request this improved deletion mode explicitly).
See also the --delete-delay option that is a better
choice than using --delete-after.
Incremental recursion can be disabled using the
--no-inc-recursive option or its shorter --no-i-r
alias.
-R, --relative
Use relative paths. This means that the full path
names specified on the command line are sent to the
server rather than just the last parts of the file-
names. This is particularly useful when you want to
send several different directories at the same
time. For example, if you used this command:
rsync -av /foo/bar/baz.c remote:/tmp/
... this would create a file named baz.c in /tmp/
on the remote machine. If instead you used
rsync -avR /foo/bar/baz.c remote:/tmp/
then a file named /tmp/foo/bar/baz.c would be cre-
ated on the remote machine, preserving its full
path. These extra path elements are called
"implied directories" (i.e. the "foo" and the
"foo/bar" directories in the above example).
Beginning with rsync 3.0.0, rsync always 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 some
really unexpected behaviors when copying the full
path of a file that you didn't realize had a sym-
link in its path. If you want to duplicate a
server-side symlink, include both the symlink via
its path, and referent directory via its real path.
If you're dealing with an older rsync on the send-
ing side, you may need to use the --no-implied-dirs
option.
It is also possible to limit the amount of path
information that is sent as implied directories for
each path you specify. With a modern rsync on the
sending side (beginning with 2.6.7), you can insert
a dot and a slash into the source path, like this:
rsync -avR /foo/./bar/baz.c remote:/tmp/
That would create /tmp/bar/baz.c on the remote
machine. (Note that the dot must be followed by a
slash, so "/foo/." would not be abbreviated.) (2)
For older rsync versions, you would need to use a
chdir to limit the source path. For example, when
pushing files:
(cd /foo; rsync -avR bar/baz.c remote:/tmp/)
(Note that the parens put the two commands into a
sub-shell, so that the "cd" command doesn't remain
in effect for future commands.) If you're pulling
files from an older rsync, use this idiom (but only
for a non-daemon transfer):
rsync -avR --rsync-path="cd /foo; rsync" \
remote:bar/baz.c /tmp/
--no-implied-dirs
This option affects the default behavior of the
--relative option. When it is specified, 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 cre-
ated with default attributes. This even allows
these implied path elements to have big differ-
ences, 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).
When pulling files from an rsync older than 3.0.0,
you may need to use this option if the sending side
has a symlink in the path you request and you wish
the implied directories to be transferred as normal
directories.
-b, --backup
With this option, preexisting destination files are
renamed as each file is transferred or deleted.
You can control where the backup file goes and what
(if any) suffix gets appended using the
--backup-dir and --suffix options.
Note that if you don't specify --backup-dir, (1)
the --omit-dir-times option will be implied, and
(2) if --delete is also in effect (without
--delete-excluded), rsync will add a "protect" fil-
ter-rule for the backup suffix to the end of all
your existing excludes (e.g. -f "P *~"). This will
prevent previously backed-up files from being
deleted. Note that if you are supplying your own
filter rules, you may need to manually insert your
own exclude/protect rule somewhere 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).
--backup-dir=DIR
In combination with the --backup option, this tells
rsync to store all backups in the specified direc-
tory on the receiving side. This can be used for
incremental backups. You can additionally specify
a backup suffix using the --suffix option (other-
wise the files backed up in the specified directory
will keep their original filenames).
--suffix=SUFFIX
This option allows you to override the default
backup suffix used with the --backup (-b) option.
The default suffix is a ~ if no --backup-dir was
specified, otherwise it is an empty string.
-u, --update
This forces rsync to skip any files which exist on
the destination and have a modified time that is
newer than the source file. (If an existing desti-
nation file has a modification time equal to the
source file's, it will be updated if the sizes are
different.)
Note that this does not affect the copying of sym-
links or other special files. Also, a difference
of file format between the sender and receiver is
always considered to be important enough for an
update, no matter what date is on the objects. In
other words, if the source has a directory where
the destination has a file, the transfer would
occur regardless of the timestamps.
--inplace
This option changes how rsync transfers a file when
the file's data needs to be updated: instead of the
default method of creating a new copy of the file
and moving it into place when it is complete, rsync
instead writes the updated data directly to the
destination file.
This has several effects: (1) in-use binaries can-
not be updated (either the OS will prevent this
from happening, or binaries that attempt to swap-in
their data will misbehave or crash), (2) the file's
data will be in an inconsistent state during the
transfer, (3) a file's data may be left in an
inconsistent state after the transfer if the trans-
fer is interrupted or if an update fails, (4) a
file that does not have write permissions can not
be updated, and (5) the efficiency of rsync's
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
(one exception to this is if you combine this
option with --backup, since rsync is smart enough
to use the backup file as the basis file for the
transfer).
WARNING: you should not use this option to update
files that are being accessed by others, so be
careful when choosing to use this for a copy.
This option is useful for transfer of large files
with block-based changes or appended data, and also
on systems that are disk bound, not network bound.
The option implies --partial (since an interrupted
transfer does not delete the file), but conflicts
with --partial-dir and --delay-updates. Prior to
rsync 2.6.4 --inplace was also incompatible with
--compare-dest and --link-dest.
--append
This causes rsync to update a file by appending
data onto the end of the file, which presumes that
the data that already exists on the receiving side
is identical with the start of the file on the
sending side. If a file needs to be transferred
and its size on the receiver is the same or longer
than the size on the sender, the file is skipped.
This does not interfere with the updating of a
file's non-content attributes (e.g. permissions,
ownership, etc.) when the file does not need to be
transferred, nor does it affect the updating of any
non-regular files. Implies --inplace, but does not
conflict with --sparse (since it is always extend-
ing a file's length).
--append-verify
This works just like the --append option, but the
existing data on the receiving side is included in
the full-file checksum verification step, which
will cause a file to be resent if the final verifi-
cation step fails (rsync uses a normal, non-append-
ing --inplace transfer for the resend).
Note: prior to rsync 3.0.0, the --append option
worked like --append-verify, so if you are inter-
acting with an older rsync (or the transfer is
using a protocol prior to 30), specifying either
append option will initiate an --append-verify
transfer.
-d, --dirs
Tell the sending side to include any directories
that are encountered. Unlike --recursive, a direc-
tory'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 the --recursive option, rsync will skip
all directories it encounters (and output a message
to that effect for each one). If you specify both
--dirs and --recursive, --recursive takes prece-
dence.
The --dirs option is implied by the --files-from
option or the --list-only option (including an
implied --list-only usage) if --recursive wasn't
specified (so that directories are seen in the
listing). Specify --no-dirs (or --no-d) if you
want to turn this off.
There is also a backward-compatibility helper
option, --old-dirs (or --old-d) that tells rsync to
use a hack of "-r --exclude='/*/*'" to get an older
rsync to list a single directory without recursing.
-l, --links
When symlinks are encountered, recreate the symlink
on the destination.
-L, --copy-links
When symlinks are encountered, the item that they
point to (the referent) is copied, rather than the
symlink. In older versions of rsync, this option
also had the side-effect of telling the receiving
side to follow symlinks, such as symlinks to direc-
tories. In a modern rsync such as this one, you'll
need to specify --keep-dirlinks (-K) to get this
extra behavior. The only exception is when sending
files to an rsync that is too old to understand -K
-- in that case, the -L option will still have the
side-effect of -K on that older receiving rsync.
--copy-unsafe-links
This tells rsync to copy the referent of symbolic
links that point outside the copied tree. Absolute
symlinks are also treated like ordinary files, and
so are any symlinks in the source path itself when
--relative is used. This option has no additional
effect if --copy-links was also specified.
--safe-links
This tells rsync to ignore any symbolic links which
point outside the copied tree. All absolute sym-
links are also ignored. Using this option in con-
junction with --relative may give unexpected
results.
-k, --copy-dirlinks
This option causes the sending side to treat a sym-
link to a directory as though it were a real direc-
tory. This is useful if you don't want symlinks to
non-directories to be affected, as they would be
using --copy-links.
Without this option, 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 also --keep-dirlinks for an analogous option
for the receiving side.
-K, --keep-dirlinks
This option causes the receiving side to treat a
symlink to a directory as though it were a real
directory, but only if it matches a real directory
from the sender. Without this option, the
receiver's symlink would be deleted and replaced
with a real directory.
For example, suppose you 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".
One note of caution: if you use --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, you are better off using something like 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
This tells rsync to look for hard-linked files in
the transfer and link together 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 you are updating a non-empty destination, this
option only ensures that files that are hard-linked
together on the source are hard-linked together on
the destination. It does NOT currently endeavor to
break already existing hard links on the destina-
tion that do not exist between the source files.
Note, however, that if one or more extra-linked
files have content changes, they will become
unlinked when updated (assuming you are not using
the --inplace option).
Note that rsync can only detect hard links between
files that are inside the transfer set. If rsync
updates a file that has extra hard-link connections
to files outside the transfer, that linkage will be
broken. If you are tempted to use the --inplace
option to avoid this breakage, be very careful that
you know how your files are being updated so that
you are certain that no unintended changes happen
due to lingering hard links (and see the --inplace
option for more caveats).
If incremental recursion is active (see --recur-
sive), 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. One way to avoid this is to dis-
able incremental recursion using the
--no-inc-recursive option.
-p, --perms
This option causes the receiving rsync to set the
destination permissions to be the same as the
source permissions. (See also the --chmod option
for a way to modify what rsync considers to be the
source permissions.)
When this option is off, permissions are set as
follows:
o Existing files (including updated files)
retain their existing permissions, though
the --executability option might change just
the execute permission for the file.
o New files get their "normal" permission bits
set to the source file's permissions masked
with the receiving directory's default per-
missions (either the receiving process's
umask, or the permissions specified via the
destination directory's default ACL), and
their special permission bits disabled
except in the case where a new directory
inherits a setgid bit from its parent direc-
tory.
Thus, when --perms and --executability are both
disabled, rsync's behavior is the same as that of
other file-copy utilities, such as cp(1) and
tar(1).
In summary: to give destination files (both old and
new) the source permissions, use --perms. To give
new files the destination-default permissions
(while leaving existing files unchanged), make sure
that the --perms option is off and use
--chmod=ugo=rwX (which ensures that all non-masked
bits get enabled). If you'd care to make this lat-
ter behavior easier to type, you could define a
popt alias for it, such as putting this line in the
file ~/.popt (the following defines the -Z option,
and includes --no-g to use the default group of the
destination dir):
rsync alias -Z --no-p --no-g --chmod=ugo=rwX
You could then use this new option in a command
such as this one:
rsync -avZ src/ dest/
(Caveat: make sure that -a does not follow -Z, or
it will re-enable the two "--no-*" options men-
tioned above.)
The preservation of the destination's setgid bit on
newly-created directories when --perms is off was
added in rsync 2.6.7. Older rsync versions erro-
neously preserved the three special permission bits
for newly-created files when --perms was off, while
overriding the destination's setgid bit setting on
a newly-created directory. Default ACL observance
was added to the ACL patch for rsync 2.6.7, so
older (or non-ACL-enabled) rsyncs use the umask
even if default ACLs are present. (Keep in mind
that it is the version of the receiving rsync that
affects these behaviors.)
-E, --executability
This option causes rsync to preserve the exe-
cutability (or non-executability) 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:
o To make a file non-executable, rsync turns
off all its `x' permissions.
o To make a file executable, rsync turns on
each `x' permission that has a corresponding
`r' permission enabled.
If --perms is enabled, this option is ignored.
-A, --acls
This option causes rsync to update the destination
ACLs to be the same as the source ACLs. The option
also implies --perms.
The source and destination systems must have com-
patible ACL entries for this option to work prop-
erly. See the --fake-super option for a way to
backup and restore ACLs that are not compatible.
-X, --xattrs
This option causes rsync to update the remote
extended attributes to be the same as the local
ones.
For systems that support extended-attribute names-
paces, a copy being done by a super-user copies all
namespaces except system.*. A normal user only
copies the user.* namespace. To be able to backup
and restore non-user namespaces as a normal user,
see the --fake-super option.
--chmod
This option tells rsync to apply one or more comma-
separated "chmod" strings to the permission of the
files in the transfer. The resulting value is
treated as though it was the permissions that the
sending side supplied for the file, which means
that this option can seem to have no effect on
existing files if --perms is not enabled.
In addition to the normal parsing rules specified
in the chmod(1) manpage, you can specify an item
that should only apply to a directory by prefixing
it with a `D', or specify an item that should only
apply to a file by prefixing it with a `F'. For
example:
--chmod=Dg+s,ug+w,Fo-w,+X
It is also legal to specify multiple --chmod
options, as each additional option is just appended
to the list of changes to make.
See the --perms and --executability options for how
the resulting permission value can be applied to
the files in the transfer.
-o, --owner
This option causes rsync to set the owner of the
destination file to be the same as the source file,
but only if the receiving rsync is being run as the
super-user (see also the --super and --fake-super
options). Without this option, the owner of new
and/or transferred files are set to the invoking
user on the receiving side.
The preservation of ownership will associate match-
ing names by default, but may fall back to using
the ID number in some circumstances (see also the
--numeric-ids option for a full discussion).
-g, --group
This option causes rsync to set the group of the
destination file to be the same as the source file.
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 associ-
ate matching names by default, but may fall back to
using the ID number in some circumstances (see also
the --numeric-ids option for a full discussion).
--devices
This option causes rsync to transfer character and
block device files to the remote system to recreate
these devices. This option has no effect if the
receiving rsync is not run as the super-user (see
also the --super and --fake-super options).
--specials
This option causes rsync to transfer special files
such as named sockets and fifos.
-D The -D option is equivalent to --devices --spe-
cials.
-t, --times
This tells rsync to transfer modification times
along with the files and update them on the remote
system. Note that if this option is not used, the
optimization that excludes files that have not been
modified cannot be effective; in other words, a
missing -t or -a will cause the next transfer to
behave as if it used -I, causing all files to be
updated (though rsync's delta-transfer algorithm
will make the update fairly efficient if the files
haven't actually changed, you're much better off
using -t).
-O, --omit-dir-times
This tells rsync to omit directories when it is
preserving modification times (see --times). If
NFS is sharing the directories on the receiving
side, it is a good idea to use -O. This option is
inferred if you use --backup without --backup-dir.
--super
This tells the receiving side to attempt super-user
activities even if the receiving rsync wasn't run
by the super-user. These activities include: pre-
serving users via the --owner option, preserving
all groups (not just the current user's groups) via
the --groups option, and copying devices via the
--devices option. This is useful for systems that
allow such activities without being the super-user,
and also for ensuring that you will get errors if
the receiving side isn't being running as the
super-user. To turn off super-user activities, the
super-user can use --no-super.
--fake-super
When this option is enabled, rsync simulates super-
user activities by saving/restoring the privileged
attributes via special extended attributes that are
attached to each file (as needed). This 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 we won't allow 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). This
option also handles ACLs (if --acls was specified)
and non-user extended attributes (if --xattrs was
specified).
This is a good way to backup data without using a
super-user, and to store ACLs from incompatible
systems.
The --fake-super option 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/
Since there is only one "side" in a local copy,
this option affects both the sending and receiving
of files. You'll need to specify a copy using
"localhost" if you need to avoid this, possibly
using the "lsh" shell script (from the support
directory) as a substitute for an actual remote
shell (see --rsh).
This option is overridden by both --super and
--no-super.
See also the "fake super" setting in the daemon's
rsyncd.conf file.
-S, --sparse
Try to handle sparse files efficiently so they take
up less space on the destination. Conflicts with
--inplace because it's not possible to overwrite
data in a sparse fashion.
NOTE: Don't use this option when the destination is
a Solaris "tmpfs" filesystem. It doesn't seem to
handle seeks over null regions correctly and ends
up corrupting the files.
-n, --dry-run
This makes rsync perform a trial run that doesn't
make any changes (and produces mostly the same out-
put as a real run). It is most commonly used in
combination with the -v, --verbose and/or -i,
--itemize-changes options to see what an rsync com-
mand is going to do before one actually runs it.
The output of --itemize-changes is supposed to be
exactly the same on a dry run and a subsequent real
run (barring intentional trickery and system call
failures); if it isn't, that's a bug. Other output
is the same to the extent practical, but may differ
in some areas. Notably, a dry run does not send
the actual data for file transfers, so --progress
has no effect, the "bytes sent", "bytes received",
"literal data", and "matched data" statistics are
too small, and the "speedup" value is equivalent to
a run where no file transfers are needed.
-W, --whole-file
With this option rsync's delta-transfer algorithm
is not used and the whole file is sent as-is
instead. 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 (especially when the "disk" is actually a
networked filesystem). This is the default when
both the source and destination are specified as
local paths.
-x, --one-file-system
This tells rsync to avoid crossing a filesystem
boundary when recursing. This does not limit the
user's ability to specify items to copy from multi-
ple filesystems, just rsync's recursion through the
hierarchy of each directory that the user speci-
fied, 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.
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
encounters (using the attributes of the mounted
directory because those of the underlying mount-
point directory are inaccessible).
If rsync has been told to 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 unaf-
fected by this option.
--existing, --ignore-non-existing
This tells rsync to skip creating files (including
directories) that do not exist yet on the destina-
tion. If this option is combined with the
--ignore-existing option, no files will be updated
(which can be useful if all you want to do is
delete extraneous files).
--ignore-existing
This tells rsync to skip updating files that
already exist on the destination (this does not
ignore existing directories, or nothing would get
done). See also --existing.
This option can be useful for those doing backups
using the --link-dest option when they need to con-
tinue a backup run that got interrupted. 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-han-
dled 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.
--remove-source-files
This tells rsync to remove from the sending side
the files (meaning non-directories) that are a part
of the transfer and have been successfully dupli-
cated on the receiving side.
--delete
This tells rsync to delete extraneous files from
the receiving side (ones that aren't on the sending
side), but only for the directories that are being
synchronized. You must have asked rsync to send
the whole directory (e.g. "dir" or "dir/") without
using a wildcard for the directory's contents (e.g.
"dir/*") since the wildcard is expanded by the
shell and rsync thus gets a request to transfer
individual files, not the files' parent directory.
Files that are excluded from the transfer are also
excluded from being deleted unless you use the
--delete-excluded option or mark the rules as only
matching on the sending side (see the
include/exclude modifiers in the FILTER RULES sec-
tion).
Prior to rsync 2.6.7, this option would have no
effect unless --recursive was enabled. Beginning
with 2.6.7, deletions will also occur when --dirs
(-d) is enabled, but only for directories whose
contents are being copied.
This option can be dangerous if used incorrectly!
It is a very good idea to first try a run using the
--dry-run option (-n) to see what files are going
to be deleted.
If the sending side detects any I/O errors, then
the deletion of any files at the destination will
be automatically disabled. This is to prevent tem-
porary filesystem failures (such as NFS errors) on
the sending side causing a massive deletion of
files on the destination. You can override this
with the --ignore-errors option.
The --delete option may be combined with one of the
--delete-WHEN options without conflict, as well as
--delete-excluded. However, if none of the
--delete-WHEN options are specified, rsync will
choose the --delete-during algorithm when talking
to rsync 3.0.0 or newer, and the --delete-before
algorithm when talking to an older rsync. See also
--delete-delay and --delete-after.
--delete-before
Request that the file-deletions on the receiving
side be done before the transfer starts. See
--delete (which is implied) for more details on
file-deletion.
Deleting before the transfer is helpful if the
filesystem is tight for space and removing extrane-
ous files would help to make the transfer possible.
However, it does introduce a delay before the start
of the transfer, and this delay might cause the
transfer to timeout (if --timeout was specified).
It also forces rsync to use the old, non-incremen-
tal recursion algorithm that requires rsync to scan
all the files in the transfer into memory at once
(see --recursive).
--delete-during, --del
Request that the file-deletions on the receiving
side be done incrementally as the transfer happens.
The per-directory delete scan is done right before
each directory is checked for updates, so it
behaves like a more efficient --delete-before,
including doing the deletions prior to any per-
directory filter files being updated. This option
was first added in rsync version 2.6.4. See
--delete (which is implied) for more details on
file-deletion.
--delete-delay
Request that the file-deletions on the receiving
side be computed during the transfer (like
--delete-during), and then removed after the trans-
fer completes. This is useful when combined with
--delay-updates and/or --fuzzy, and is more effi-
cient than using --delete-after (but can behave
differently, since --delete-after computes the
deletions in a separate pass after all updates are
done). If the number of removed files overflows an
internal buffer, a temporary file will be created
on the receiving side to hold the names (it is
removed while open, so you shouldn't see it during
the transfer). If the creation of the temporary
file fails, rsync will try to fall back to using
--delete-after (which it cannot do if --recursive
is doing an incremental scan). See --delete (which
is implied) for more details on file-deletion.
--delete-after
Request that the file-deletions on the receiving
side be done after the transfer has completed.
This is useful if you are 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. It also forces
rsync to use the old, non-incremental recursion
algorithm that requires rsync to scan all the files
in the transfer into memory at once (see --recur-
sive). See --delete (which is implied) for more
details on file-deletion.
--delete-excluded
In addition to deleting the files on the receiving
side that are not on the sending side, this tells
rsync to also delete any files on the receiving
side that are excluded (see --exclude). 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. See
--delete (which is implied) for more details on
file-deletion.
--ignore-errors
Tells --delete to go ahead and delete files even
when there are I/O errors.
--force
This option tells rsync to delete a non-empty
directory when it is to be replaced by a non-direc-
tory. This is only relevant if deletions are not
active (see --delete for details).
Note for older rsync versions: --force used to
still be required when using --delete-after, and it
used to be non-functional unless the --recursive
option was also enabled.
--max-delete=NUM
This tells rsync not to delete more than NUM files
or directories. If that limit is exceeded, a warn-
ing is output and rsync exits with an error code of
25 (new for 3.0.0).
Also new for version 3.0.0, you may specify
--max-delete=0 to be warned about any extraneous
files in the destination without removing any of
them. Older clients interpreted this as "unlim-
ited", so if you don't know what version the client
is, you can use the less obvious --max-delete=-1 as
a backward-compatible way to specify that no dele-
tions be allowed (though older versions didn't warn
when the limit was exceeded).
--max-size=SIZE
This tells rsync to avoid transferring any file
that is larger than the specified SIZE. The SIZE
value can be suffixed with a string to indicate a
size multiplier, and may be a fractional value
(e.g. "--max-size=1.5m").
The suffixes are as follows: "K" (or "KiB") is a
kibibyte (1024), "M" (or "MiB") is a mebibyte
(1024*1024), and "G" (or "GiB") is a gibibyte
(1024*1024*1024). If you want the multiplier to be
1000 instead of 1024, use "KB", "MB", or "GB".
(Note: lower-case is also accepted for all values.)
Finally, if the suffix ends in either "+1" or "-1",
the value will be offset by one byte in the indi-
cated direction.
Examples: --max-size=1.5mb-1 is 1499999 bytes, and
--max-size=2g+1 is 2147483649 bytes.
--min-size=SIZE
This tells rsync to avoid transferring any file
that is smaller than the specified SIZE, which can
help in not transferring small, junk files. See
the --max-size option for a description of SIZE.
-B, --block-size=BLOCKSIZE
This forces the block size used in rsync's delta-
transfer algorithm to a fixed value. It is nor-
mally selected based on the size of each file being
updated. See the technical report for details.
-e, --rsh=COMMAND
This option allows you to choose an alternative
remote shell program to use for communication
between the local and remote copies of rsync. Typi-
cally, rsync is configured to use ssh by default,
but you may prefer to use rsh on a local network.
If this option is used with [user@]host::mod-
ule/path, then the remote shell COMMAND will be
used to run an rsync daemon on the remote host, and
all data will be transmitted through that remote
shell connection, rather than through a direct
socket connection to a running rsync daemon on the
remote host. See the section "USING RSYNC-DAEMON
FEATURES VIA A REMOTE-SHELL CONNECTION" above.
Command-line arguments are permitted in COMMAND
provided that COMMAND is presented to rsync as a
single argument. You must use spaces (not tabs or
other whitespace) to separate the command and args
from each other, and you can use single- and/or
double-quotes to preserve spaces in an argument
(but not backslashes). Note that doubling a sin-
gle-quote inside a single-quoted string gives you a
single-quote; likewise for double-quotes (though
you need to pay attention to which quotes your
shell is parsing and which quotes rsync is pars-
ing). Some examples:
-e 'ssh -p 2234'
-e 'ssh -o "ProxyCommand nohup ssh firewall nc
-w1 %h %p"'
(Note that ssh users can alternately customize
site-specific connect options in their .ssh/config
file.)
You can also choose the remote shell program using
the RSYNC_RSH environment variable, which accepts
the same range of values as -e.
See also the --blocking-io option which is affected
by this option.
--rsync-path=PROGRAM
Use this to specify what program is to be run on
the remote machine to start-up rsync. Often used
when rsync is not in the default remote-shell's
path (e.g. --rsync-path=/usr/local/bin/rsync).
Note that PROGRAM is run with the help of a shell,
so it can be any program, script, or command
sequence you'd care to run, so long as it does not
corrupt the standard-in & standard-out that rsync
is using to communicate.
One tricky example is to set a different default
directory on the remote machine for use with the
--relative option. For instance:
rsync -avR --rsync-path="cd /a/b && rsync"
host:c/d /e/
-C, --cvs-exclude
This is a useful shorthand for excluding a broad
range of files that you often don't want to trans-
fer between systems. It uses a similar algorithm to
CVS to determine if a file should be ignored.
The exclude list is initialized to exclude the fol-
lowing items (these initial items are marked as
perishable -- see the FILTER RULES section):
RCS SCCS CVS CVS.adm RCSLOG cvslog.* tags
TAGS .make.state .nse_depinfo *~ #* .#* ,*
_$* *$ *.old *.bak *.BAK *.orig *.rej .del-*
*.a *.olb *.o *.obj *.so *.exe *.Z *.elc
*.ln core .svn/ .git/ .bzr/
then, files listed in a $HOME/.cvsignore are added
to the list and any files listed in the CVSIGNORE
environment variable (all cvsignore names are
delimited by whitespace).
Finally, any file is ignored if it is in the same
directory as a .cvsignore file and matches one of
the patterns listed therein. Unlike rsync's
filter/exclude files, these patterns are split on
whitespace. See the cvs(1) manual for more infor-
mation.
If you're combining -C with your own --filter
rules, you should note that these CVS excludes are
appended at the end of your own rules, regardless
of where the -C was placed on the command-line.
This makes them a lower priority than any rules you
specified explicitly. If you want to control where
these CVS excludes get inserted into your filter
rules, you should omit the -C as a command-line
option and use a combination of --filter=:C and
--filter=-C (either on your command-line or by
putting the ":C" and "-C" rules into a filter file
with your other rules). The first option turns on
the per-directory scanning for the .cvsignore file.
The second option does a one-time import of the CVS
excludes mentioned above.
-f, --filter=RULE
This option allows you to add rules to selectively
exclude certain files from the list of files to be
transferred. This is most useful in combination
with a recursive transfer.
You may use as many --filter options on the command
line as you like to build up the list of files to
exclude. If the filter contains whitespace, be
sure to quote it so that the shell gives the rule
to rsync as a single argument. The text below also
mentions that you can use an underscore to replace
the space that separates a rule from its arg.
See the FILTER RULES section for detailed informa-
tion on this option.
-F The -F option is a shorthand for adding two --fil-
ter rules to your command. The first time it is
used is a shorthand for this rule:
--filter='dir-merge /.rsync-filter'
This tells rsync to look for per-directory
.rsync-filter files that have been sprinkled
through the hierarchy and use their rules to filter
the files in the transfer. If -F is repeated, it
is a shorthand for this rule:
--filter='exclude .rsync-filter'
This filters out the .rsync-filter files themselves
from the transfer.
See the FILTER RULES section for detailed informa-
tion on how these options work.
--exclude=PATTERN
This option is a simplified form of the --filter
option that defaults to an exclude rule and does
not allow the full rule-parsing syntax of normal
filter rules.
See the FILTER RULES section for detailed informa-
tion on this option.
--exclude-from=FILE
This option is related to the --exclude option, but
it specifies a FILE that contains exclude patterns
(one per line). Blank lines in the file and lines
starting with `;' or `#' are ignored. If FILE is
-, the list will be read from standard input.
--include=PATTERN
This option is a simplified form of the --filter
option that defaults to an include rule and does
not allow the full rule-parsing syntax of normal
filter rules.
See the FILTER RULES section for detailed informa-
tion on this option.
--include-from=FILE
This option is related to the --include option, but
it specifies a FILE that contains include patterns
(one per line). Blank lines in the file and lines
starting with `;' or `#' are ignored. If FILE is
-, the list will be read from standard input.
--files-from=FILE
Using this option allows you to specify the exact
list of files to transfer (as read from the speci-
fied FILE or - for standard input). It also tweaks
the default behavior of rsync to make transferring
just the specified files and directories easier:
o The --relative (-R) option is implied, which
preserves the path information that is spec-
ified for each item in the file (use
--no-relative or --no-R if you want to turn
that off).
o The --dirs (-d) option is implied, which
will create directories specified in the
list on the destination rather than noisily
skipping them (use --no-dirs or --no-d if
you want to turn that off).
o The --archive (-a) option's behavior does
not imply --recursive (-r), so specify it
explicitly, if you want it.
o These side-effects change the default state
of rsync, so the position of the
--files-from option on the command-line has
no bearing on how other options are parsed
(e.g. -a works the same before or after
--files-from, as does --no-R and all other
options).
The filenames that are read from the FILE are all
relative to the source dir -- any leading slashes
are removed and no ".." references are allowed to
go higher than the source dir. For example, take
this command:
rsync -a --files-from=/tmp/foo /usr
remote:/backup
If /tmp/foo contains the string "bin" (or even
"/bin"), the /usr/bin directory will be created as
/backup/bin on the remote host. If it contains
"bin/" (note the trailing slash), the immediate
contents of the directory would also be sent (with-
out needing to be explicitly mentioned in the file
-- this began in version 2.6.4). In both cases, if
the -r option was enabled, that dir's entire hier-
archy would also be transferred (keep in mind that
-r needs to be specified explicitly with
--files-from, since it is not implied by -a). Also
note that the effect of the (enabled by default)
--relative option is to duplicate only the path
info that is read from the file -- it does not
force the duplication of the source-spec path (/usr
in this case).
In addition, the --files-from file can be read from
the remote host instead of the local host if you
specify a "host:" in front of the file (the host
must match one end of the transfer). As a short-
cut, you can specify just a prefix of ":" to mean
"use the remote end of the transfer". For example:
rsync -a --files-from=:/path/file-list src:/
/tmp/copy
This would copy all the files specified in the
/path/file-list file that was located on the remote
"src" host.
-0, --from0
This tells rsync that the rules/filenames it reads
from a file are terminated by a null ('\0') charac-
ter, not a NL, CR, or CR+LF. This affects
--exclude-from, --include-from, --files-from, and
any merged files specified in a --filter rule. It
does not affect --cvs-exclude (since all names read
from a .cvsignore file are split on whitespace).
If the --iconv and --protect-args options are spec-
ified and the --files-from filenames are being sent
from one host to another, the filenames will be
translated from the sending host's charset to the
receiving host's charset.
-s, --protect-args
This option sends all filenames and some options to
the remote rsync without allowing the remote shell
to interpret them. This means that spaces are not
split in names, and any non-wildcard special char-
acters are not translated (such as ~, $, ;, &,
etc.). Wildcards are expanded on the remote host
by rsync (instead of the shell doing it).
If you use this option with --iconv, the args will
also be translated from the local to the remote
character-set. The translation happens before
wild-cards are expanded. See also the --files-from
option.
-T, --temp-dir=DIR
This option instructs rsync to use DIR as a scratch
directory when creating temporary copies of the
files transferred on the receiving side. The
default behavior is to create each temporary file
in the same directory as the associated destination
file.
This option is most often used when the receiving
disk partition does not have enough free space to
hold a copy of the largest file in the transfer.
In this case (i.e. when the scratch directory is on
a different disk partition), rsync will not be able
to rename each received temporary file over the top
of the associated destination file, but instead
must copy it into place. Rsync does this by copy-
ing the file over the top of the destination file,
which means that the destination file will contain
truncated data during this copy. If this were not
done this way (even if the destination file were
first removed, the data locally copied to a tempo-
rary file in the destination directory, and then
renamed into place) it would be possible for the
old file to continue taking up disk space (if some-
one had it open), and thus there might not be
enough room to fit the new version on the disk at
the same time.
If you are using this option for reasons other than
a shortage of disk space, you may wish to combine
it with the --delay-updates option, which will
ensure that all copied files get put into subdirec-
tories in the destination hierarchy, awaiting the
end of the transfer. If you don't have enough room
to duplicate all the arriving files on the destina-
tion partition, another way to tell rsync that you
aren't overly concerned about disk space is to use
the --partial-dir option with a relative path;
because this tells rsync that it is OK to stash off
a copy of a single file in a subdir in the destina-
tion hierarchy, rsync will use the partial-dir as a
staging area to bring over the copied file, and
then rename it into place from there. (Specifying a
--partial-dir with an absolute path does not have
this side-effect.)
-y, --fuzzy
This option tells rsync that it should look for a
basis file for any destination file that is miss-
ing. The current algorithm looks in the same
directory as the destination file for either a file
that has an identical size and modified-time, or a
similarly-named file. If found, rsync uses the
fuzzy basis file to try to speed up the transfer.
Note that the use of the --delete option might get
rid of any potential fuzzy-match files, so either
use --delete-after or specify some filename exclu-
sions if you need to prevent this.
--compare-dest=DIR
This option instructs rsync to use DIR on the des-
tination machine as an additional hierarchy to com-
pare destination files against doing transfers (if
the files are missing in the destination direc-
tory). If a file is found in DIR that is identical
to the sender's file, the file will NOT be trans-
ferred to the destination directory. This is use-
ful for creating a sparse backup of just files that
have changed from an earlier backup.
Beginning in version 2.6.4, multiple --compare-dest
directories may be provided, which will cause rsync
to search the list in the order specified for an
exact match. If a match is found that differs only
in attributes, a local copy is made and the
attributes updated. If a match is not found, a
basis file from one of the DIRs will be selected to
try to speed up the transfer.
If DIR is a relative path, it is relative to the
destination directory. See also --copy-dest and
--link-dest.
--copy-dest=DIR
This option behaves like --compare-dest, but rsync
will also copy unchanged files found in DIR to the
destination directory using a local copy. This is
useful for doing transfers to a new destination
while leaving existing files intact, and then doing
a flash-cutover when all files have been success-
fully transferred.
Multiple --copy-dest directories may be provided,
which will cause rsync to search the list in the
order specified for an unchanged file. If a match
is not found, a basis file from one of the DIRs
will be selected to try to speed up the transfer.
If DIR is a relative path, it is relative to the
destination directory. See also --compare-dest and
--link-dest.
--link-dest=DIR
This option behaves like --copy-dest, but unchanged
files are hard linked from DIR to the destination
directory. The files must be identical in all pre-
served attributes (e.g. permissions, possibly own-
ership) in order for the files to be linked
together. An example:
rsync -av --link-dest=$PWD/prior_dir
host:src_dir/ new_dir/
If file's aren't linking, double-check their
attributes. Also check if some attributes are get-
ting forced outside of rsync's control, such a
mount option that squishes root to a single user,
or mounts a removable drive with generic ownership
(such as OS X's "Ignore ownership on this volume"
option).
Beginning in version 2.6.4, multiple --link-dest
directories may be provided, which will cause rsync
to search the list in the order specified for an
exact match. If a match is found that differs only
in attributes, a local copy is made and the
attributes updated. If a match is not found, a
basis file from one of the DIRs will be selected to
try to speed up the transfer.
This option works best when copying into an empty
destination hierarchy, as rsync treats existing
files as definitive (so it never looks in the link-
dest dirs when a destination file already exists),
and as malleable (so it might change the attributes
of a destination file, which affects all the hard-
linked versions).
Note that if you combine this option with
--ignore-times, rsync will not link any files
together because it only links identical files
together as a substitute for transferring the file,
never as an additional check after the file is
updated.
If DIR is a relative path, it is relative to the
destination directory. See also --compare-dest and
--copy-dest.
Note that rsync versions prior to 2.6.1 had a bug
that could prevent --link-dest from working prop-
erly for a non-super-user when -o was specified (or
implied by -a). You can work-around this bug by
avoiding the -o option when sending to an old
rsync.
-z, --compress
With this option, rsync compresses the file data as
it is sent to the destination machine, which
reduces the amount of data being transmitted --
something that is useful over a slow connection.
Note that this option typically achieves better
compression ratios than can be achieved by using a
compressing remote shell or a compressing transport
because it takes advantage of the implicit informa-
tion in the matching data blocks that are not
explicitly sent over the connection.
See the --skip-compress option for the default list
of file suffixes that will not be compressed.
--compress-level=NUM
Explicitly set the compression level to use (see
--compress) instead of letting it default. If NUM
is non-zero, the --compress option is implied.
--skip-compress=LIST
Override the list of file suffixes that will not be
compressed. The LIST should be one or more file
suffixes (without the dot) separated by slashes
(/).
You may specify an empty string to indicate that no
file should be skipped.
Simple character-class matching is supported: each
must consist of a list of letters inside the square
brackets (e.g. no special classes, such as
"[:alpha:]", are supported).
The characters asterisk (*) and question-mark (?)
have no special meaning.
Here's an example that specifies 6 suffixes to skip
(since 1 of the 5 rules matches 2 suffixes):
--skip-compress=gz/jpg/mp[34]/7z/bz2
The default list of suffixes that will not be com-
pressed is this (several of these are newly added
for 3.0.0):
gz/zip/z/rpm/deb/iso/bz2/t[gb]z/7z/mp[34]/mov/avi/ogg/jpg/jpeg
This list will be replaced by your --skip-compress
list in all but one situation: a copy from a daemon
rsync will add your skipped suffixes to its list of
non-compressing files (and its list may be config-
ured to a different default).
--numeric-ids
With this option rsync will transfer numeric group
and user IDs rather than using user and group names
and mapping them at both ends.
By default rsync will use the username and group-
name to determine what ownership to give files. The
special uid 0 and the special group 0 are never
mapped via user/group names even if the
--numeric-ids option is not specified.
If a user or group has no name on the source system
or it has no match on the destination system, then
the numeric ID from the source system is used
instead. See also the comments on the "use chroot"
setting in the rsyncd.conf manpage for information
on how the chroot setting affects rsync's ability
to look up the names of the users and groups and
what you can do about it.
--timeout=TIMEOUT
This option allows you to set a maximum I/O timeout
in seconds. If no data is transferred for the spec-
ified time then rsync will exit. The default is 0,
which means no timeout.
--contimeout
This option allows you to set the amount of time
that rsync will wait for its connection to an rsync
daemon to succeed. If the timeout is reached,
rsync exits with an error.
--address
By default rsync will bind to the wildcard address
when connecting to an rsync daemon. The --address
option allows you to specify a specific IP address
(or hostname) to bind to. See also this option in
the --daemon mode section.
--port=PORT
This specifies an alternate TCP port number to use
rather than the default of 873. This is only
needed if you are using the double-colon (::) syn-
tax to connect with an rsync daemon (since the URL
syntax has a way to specify the port as a part of
the URL). See also this option in the --daemon
mode section.
--sockopts
This option can provide endless fun for people who
like to tune their systems to the utmost degree.
You can set all sorts of socket options which may
make transfers faster (or slower!). Read the man
page for the setsockopt() system call for details
on some of the options you may be able to set. By
default no special socket options are set. This
only affects direct socket connections to a remote
rsync daemon. This option also exists in the
--daemon mode section.
--blocking-io
This tells rsync to use blocking I/O when launching
a remote shell transport. If the remote shell is
either rsh or remsh, rsync defaults to using block-
ing I/O, otherwise it defaults to using non-block-
ing I/O. (Note that ssh prefers non-blocking I/O.)
-i, --itemize-changes
Requests a simple itemized list of the changes that
are being made to each file, including attribute
changes. This is exactly the same as specifying
--out-format='%i %n%L'. If you repeat the option,
unchanged files will also be output, but only if
the receiving rsync is at least version 2.6.7 (you
can use -vv with older versions of rsync, but that
also turns on the output of other verbose mes-
sages).
The "%i" escape has a cryptic output that is 11
letters long. The general format is like the
string YXcstpoguax, where Y is replaced by the type
of update being done, X is replaced by the file-
type, and the other letters represent attributes
that may be output if they are being modified.
The update types that replace the Y are as follows:
o A < means that a file is being transferred
to the remote host (sent).
o A > means that a file is being transferred
to the local host (received).
o A c means that a local change/creation is
occurring for the item (such as the creation
of a directory or the changing of a symlink,
etc.).
o A h means that the item is a hard link to
another item (requires --hard-links).
o A . means that the item is not being updated
(though it might have attributes that are
being modified).
o A * means that the rest of the itemized-out-
put area contains a message (e.g. "delet-
ing").
The file-types that replace the X are: f for a
file, a d for a directory, an L for a symlink, a D
for a device, and a S for a special file (e.g.
named sockets and fifos).
The other letters in the string above are the
actual letters that will be output if the associ-
ated attribute for the item is being updated or a
"." for no change. Three exceptions to this are:
(1) a newly created item replaces each letter with
a "+", (2) an identical item replaces the dots with
spaces, and (3) an unknown attribute replaces each
letter with a "?" (this can happen when talking to
an older rsync).
The attribute that is associated with each letter
is as follows:
o A c means either that a regular file has a
different checksum (requires --checksum) or
that a symlink, device, or special file has
a changed value. Note that if you are send-
ing files to an rsync prior to 3.0.1, this
change flag will be present only for check-
sum-differing regular files.
o A s means the size of a regular file is dif-
ferent and will be updated by the file
transfer.
o A t means the modification time is different
and is being updated to the sender's value
(requires --times). An alternate value of T
means that the modification time will be set
to the transfer time, which happens when a
file/symlink/device is updated without
--times and when a symlink is changed and
the receiver can't set its time. (Note:
when using an rsync 3.0.0 client, you might
see the s flag combined with t instead of
the proper T flag for this time-setting
failure.)
o A p means the permissions are different and
are being updated to the sender's value
(requires --perms).
o An o means the owner is different and is
being updated to the sender's value
(requires --owner and super-user privi-
leges).
o A g means the group is different and is
being updated to the sender's value
(requires --group and the authority to set
the group).
o The u slot is reserved for future use.
o The a means that the ACL information
changed.
o The x means that the extended attribute
information changed.
One other output is possible: when deleting files,
the "%i" will output the string "*deleting" for
each item that is being removed (assuming that you
are talking to a recent enough rsync that it logs
deletions instead of outputting them as a verbose
message).
--out-format=FORMAT
This allows you to specify exactly what the rsync
client outputs to the user on a per-update basis.
The format is a text string containing embedded
single-character escape sequences prefixed with a
percent (%) character. A default format of "%n%L"
is assumed if -v is specified (which reports the
name of the file and, if the item is a link, where
it points). For a full list of the possible escape
characters, see the "log format" setting in the
rsyncd.conf manpage.
Specifying the --out-format option will mention
each file, dir, etc. that gets updated in a signif-
icant way (a transferred file, a recreated sym-
link/device, or a touched directory). In addition,
if the itemize-changes escape (%i) is included in
the string (e.g. if the --itemize-changes option
was used), the logging of names increases to men-
tion any item that is changed in any way (as long
as the receiving side is at least 2.6.4). See the
--itemize-changes option for a description of the
output of "%i".
Rsync will output the out-format string prior to a
file's transfer unless one of the transfer-statis-
tic escapes is requested, in which case the logging
is done at the end of the file's transfer. When
this late logging is in effect and --progress is
also specified, rsync will also output the name of
the file being transferred prior to its progress
information (followed, of course, by the out-format
output).
--log-file=FILE
This option causes rsync to log what it is doing to
a file. This is similar to the logging that a
daemon does, but can be requested for the client
side and/or the server side of a non-daemon trans-
fer. If specified as a client option, transfer
logging will be enabled with a default format of
"%i %n%L". See the --log-file-format option if you
wish to override this.
Here's a example command that requests the remote
side to log what is happening:
rsync -av --rsync-path="rsync --log-file=/tmp/rlog" src/ dest/
This is very useful if you need to debug why a con-
nection is closing unexpectedly.
--log-file-format=FORMAT
This allows you to specify exactly what per-update
logging is put into the file specified by the
--log-file option (which must also be specified for
this option to have any effect). If you specify an
empty string, updated files will not be mentioned
in the log file. For a list of the possible escape
characters, see the "log format" setting in the
rsyncd.conf manpage.
--stats
This tells rsync to print a verbose set of statis-
tics on the file transfer, allowing you to tell how
effective rsync's delta-transfer algorithm is for
your data.
The current statistics are as follows:
o Number of files is the count of all "files"
(in the generic sense), which includes
directories, symlinks, etc.
o Number of files transferred is the count of
normal files that were updated via rsync's
delta-transfer algorithm, which does not
include created dirs, symlinks, etc.
o Total file size is the total sum of all file
sizes in the transfer. This does not count
any size for directories or special files,
but does include the size of symlinks.
o Total transferred file size is the total sum
of all files sizes for just the transferred
files.
o Literal data is how much unmatched file-
update data we had to send to the receiver
for it to recreate the updated files.
o Matched data is how much data the receiver
got locally when recreating the updated
files.
o File list size is how big the file-list data
was when the sender sent it to the receiver.
This is smaller than the in-memory size for
the file list due to some compressing of
duplicated data when rsync sends the list.
o File list generation time is the number of
seconds that the sender spent creating the
file list. This requires a modern rsync on
the sending side for this to be present.
o File list transfer time is the number of
seconds that the sender spent sending the
file list to the receiver.
o Total bytes sent is the count of all the
bytes that rsync sent from the client side
to the server side.
o Total bytes received is the count of all
non-message bytes that rsync received by the
client side from the server side. "Non-mes-
sage" bytes means that we don't count the
bytes for a verbose message that the server
sent to us, which makes the stats more con-
sistent.
-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 charac-
ters (but never tabs) are always escaped, regard-
less of this option's setting.
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 fol-
lowed by a hash and 3 digits (0-9).
-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 spec-
ified 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.
--partial
By default, rsync will delete any partially trans-
ferred file if the transfer is interrupted. In some
circumstances it is more desirable to keep par-
tially transferred files. Using the --partial
option tells rsync to keep the partial file which
should make a subsequent transfer of the rest of
the file much faster.
--partial-dir=DIR
A better way to keep partial files than the --par-
tial option is to specify a DIR that will be used
to hold the partial data (instead of writing it out
to the destination file). On the next transfer,
rsync will use a file found in this dir as data to
speed up the resumption of the transfer and then
delete it after it has served its purpose.
Note that if --whole-file is specified (or
implied), any partial-dir file that is found for a
file that is being updated will simply be removed
(since rsync is sending files without using rsync's
delta-transfer algorithm).
Rsync will create the DIR if it is missing (just
the last dir -- not the whole path). This makes it
easy to use a relative path (such as "--par-
tial-dir=.rsync-partial") to have rsync create the
partial-directory in the destination file's direc-
tory when needed, and then remove it again when the
partial file is deleted.
If the partial-dir value is not an absolute path,
rsync will add an exclude rule at the end of all
your existing excludes. This will prevent the
sending of any partial-dir files that may exist on
the sending side, and will also prevent the
untimely deletion of partial-dir items on the
receiving side. An example: the above --par-
tial-dir option would add the equivalent of "-f '-p
.rsync-partial/'" at the end of any other filter
rules.
If you are supplying your own exclude rules, you
may need to add your own exclude/hide/protect rule
for the partial-dir because (1) the auto-added rule
may be ineffective at the end of your other rules,
or (2) you may wish to override rsync's exclude
choice. For instance, if you want to make rsync
clean-up any left-over partial-dirs that may be
lying around, you should specify --delete-after and
add a "risk" filter rule, e.g. -f 'R .rsync-par-
tial/'. (Avoid using --delete-before or
--delete-during unless you don't need rsync to use
any of the left-over partial-dir data during the
current run.)
IMPORTANT: the --partial-dir should not be writable
by other users or it is a security risk. E.g.
AVOID "/tmp".
You can also set the partial-dir value the
RSYNC_PARTIAL_DIR environment variable. Setting
this in the environment does not force --partial to
be enabled, but rather it affects where partial
files go when --partial is specified. For
instance, instead of using --partial-dir=.rsync-tmp
along with --progress, you could set RSYNC_PAR-
TIAL_DIR=.rsync-tmp in your environment and then
just use the -P option to turn on the use of the
.rsync-tmp dir for partial transfers. The only
times that the --partial option does not look for
this environment value are (1) when --inplace was
specified (since --inplace conflicts with --par-
tial-dir), and (2) when --delay-updates was speci-
fied (see below).
For the purposes of the daemon-config's "refuse
options" setting, --partial-dir does not imply
--partial. This is so that a refusal of the
--partial option can be used to disallow the over-
writing of destination files with a partial trans-
fer, while still allowing the safer idiom provided
by --partial-dir.
--delay-updates
This option puts the temporary file from each
updated file into a holding directory until the end
of the transfer, at which time all the files are
renamed into place in rapid succession. This
attempts to make the updating of the files a little
more atomic. By default the files are placed into
a directory named ".~tmp~" in each file's destina-
tion directory, but if you've specified the --par-
tial-dir option, that directory will be used
instead. See the comments in the --partial-dir
section for a discussion of how this ".~tmp~" dir
will be excluded from the transfer, and what you
can do if you want rsync to cleanup old ".~tmp~"
dirs that might be lying around. Conflicts with
--inplace and --append.
This option uses more memory on the receiving side
(one bit per file transferred) and also requires
enough free disk space on the receiving side to
hold an additional copy of all the updated files.
Note also that you should not use an absolute path
to --partial-dir unless (1) there is no chance of
any of the files in the transfer having the same
name (since all the updated files will be put into
a single directory if the path is absolute) and (2)
there are no mount points in the hierarchy (since
the delayed updates will fail if they can't be
renamed into place).
See also the "atomic-rsync" perl script in the
"support" subdir for an update algorithm that is
even more atomic (it uses --link-dest and a paral-
lel hierarchy of files).
-m, --prune-empty-dirs
This option tells the receiving rsync to get rid of
empty directories from the file-list, including
nested directories that have no non-directory chil-
dren. This is useful for avoiding the creation of
a bunch of useless directories when the sending
rsync is recursively scanning a hierarchy of files
using include/exclude/filter rules.
Because the file-list is actually being pruned,
this option also affects what directories get
deleted when a delete is active. However, keep in
mind that excluded files and directories can pre-
vent existing items from being deleted (because an
exclude hides source files and protects destination
files).
You can prevent the pruning of certain empty direc-
tories from the file-list by using a global "pro-
tect" filter. For instance, this option would
ensure that the directory "emptydir" was kept in
the file-list:
--filter 'protect emptydir/'
Here's an example that copies all .pdf files in a
hierarchy, only creating the necessary destination
directories to hold the .pdf files, and ensures
that any superfluous files and directories in the
destination are removed (note the hide filter of
non-directories being used instead of an exclude):
rsync -avm --del --include='*.pdf' -f 'hide,! */'
src/ dest
If you didn't want to remove superfluous destina-
tion files, the more time-honored options of
"--include='*/' --exclude='*'" would work fine in
place of the hide-filter (if that is more natural
to you).
--progress
This option tells rsync to print information show-
ing the progress of the transfer. This gives a
bored user something to watch. Implies --verbose
if it wasn't already specified.
While rsync is transferring a regular file, it
updates a progress line that looks like this:
782448 63% 110.64kB/s 0:00:04
In this example, the receiver has reconstructed
782448 bytes or 63% of the sender's file, which is
being reconstructed at a rate of 110.64 kilobytes
per second, and the transfer will finish in 4 sec-
onds if the current rate is maintained until the
end.
These statistics can be misleading if rsync's
delta-transfer algorithm is in use. For example,
if the sender's file consists of the basis file
followed by additional data, the reported rate will
probably drop dramatically when the receiver gets
to the literal data, and the transfer will probably
take much longer to finish than the receiver esti-
mated as it was finishing the matched part of the
file.
When the file transfer finishes, rsync replaces the
progress line with a summary line that looks like
this:
1238099 100% 146.38kB/s 0:00:08 (xfer#5, to-check=169/396)
In this example, the file was 1238099 bytes long in
total, the average rate of transfer for the whole
file was 146.38 kilobytes per second over the 8
seconds that it took to complete, it was the 5th
transfer of a regular file during the current rsync
session, and there are 169 more files for the
receiver to check (to see if they are up-to-date or
not) remaining out of the 396 total files in the
file-list.
-P The -P option is equivalent to --partial
--progress. Its purpose is to make it much easier
to specify these two options for a long transfer
that may be interrupted.
--password-file
This option allows you to provide a password in a
file for accessing an rsync daemon. The file must
not be world readable. It should contain just the
password as a single line.
This option does not supply a password to a remote
shell transport such as ssh; to learn how to do
that, consult the remote shell's documentation.
When accessing an rsync daemon using a remote shell
as the transport, this option only comes into
effect after the remote shell finishes its authen-
tication (i.e. if you have also specified a pass-
word in the daemon's config file).
--list-only
This option will cause the source files to be
listed instead of transferred. This option is
inferred if there is a single source arg and no
destination specified, so its main uses are: (1) to
turn a copy command that includes a destination arg
into a file-listing command, or (2) to be able to
specify more than one source arg (note: be sure to
include the destination). Caution: keep in mind
that a source arg with a wild-card is expanded by
the shell into multiple args, so it is never safe
to try to list such an arg without using this
option. For example:
rsync -av --list-only foo* dest/
Compatibility note: when requesting a remote list-
ing of files from an rsync that is version 2.6.3 or
older, you may encounter an error if you ask for a
non-recursive listing. This is because a file
listing implies the --dirs option w/o --recursive,
and older rsyncs don't have that option. To avoid
this problem, either specify the --no-dirs option
(if you don't need to expand a directory's con-
tent), or turn on recursion and exclude the content
of subdirectories: -r --exclude='/*/*'.
--bwlimit=KBPS
This option allows you to specify a maximum trans-
fer rate in kilobytes per second. This option is
most effective when using rsync with large files
(several megabytes and up). Due to the nature of
rsync transfers, blocks of data are sent, then if
rsync determines the transfer was too fast, it will
wait before sending the next data block. The result
is an average transfer rate equaling the specified
limit. A value of zero specifies no limit.
--write-batch=FILE
Record a file that can later be applied to another
identical destination with --read-batch. See the
"BATCH MODE" section for details, and also the
--only-write-batch option.
--only-write-batch=FILE
Works like --write-batch, except that no updates
are made on the destination system when creating
the batch. This lets you transport the changes to
the destination system via some other means and
then apply the changes via --read-batch.
Note that you can feel free to write the batch
directly to some portable media: if this media
fills to capacity before the end of the transfer,
you can just apply that partial transfer to the
destination and repeat the whole process to get the
rest of the changes (as long as you don't mind a
partially updated destination system while the
multi-update cycle is happening).
Also note that you only save bandwidth when pushing
changes to a remote system because this allows the
batched data to be diverted from the sender into
the batch file without having to flow over the wire
to the receiver (when pulling, the sender is
remote, and thus can't write the batch).
--read-batch=FILE
Apply all of the changes stored in FILE, a file
previously generated by --write-batch. If FILE is
-, the batch data will be read from standard input.
See the "BATCH MODE" section for details.
--protocol=NUM
Force an older protocol version to be used. This
is useful for creating a batch file that is compat-
ible with an older version of rsync. For instance,
if rsync 2.6.4 is being used with the --write-batch
option, but rsync 2.6.3 is what will be used to run
the --read-batch option, you should use "--proto-
col=28" when creating the batch file to force the
older protocol version to be used in the batch file
(assuming you can't upgrade the rsync on the read-
ing system).
--iconv=CONVERT_SPEC
Rsync can convert filenames between character sets
using this option. Using a CONVERT_SPEC of "."
tells rsync to look up the default character-set
via the locale setting. Alternately, you can fully
specify what conversion to do by giving a local and
a remote charset separated by a comma in the order
--iconv=LOCAL,REMOTE, e.g. --iconv=utf8,iso88591.
This order ensures that the option will stay the
same whether you're pushing or pulling files.
Finally, you can specify either --no-iconv or a
CONVERT_SPEC of "-" to turn off any conversion.
The default setting of this option is site-spe-
cific, and can also be affected via the RSYNC_ICONV
environment variable.
For a list of what charset names your local iconv
library supports, you can run "iconv --list".
If you specify the --protect-args option (-s),
rsync will translate the filenames you specify on
the command-line that are being sent to the remote
host. See also the --files-from option.
Note that rsync does not do any conversion of names
in filter files (including include/exclude files).
It is up to you to ensure that you're specifying
matching rules that can match on both sides of the
transfer. For instance, you can specify extra
include/exclude rules if there are filename differ-
ences on the two sides that need to be accounted
for.
When you pass an --iconv option to an rsync daemon
that allows it, the daemon uses the charset speci-
fied in its "charset" configuration parameter
regardless of the remote charset you actually pass.
Thus, you may feel free to specify just the local
charset for a daemon transfer (e.g. --iconv=utf8).
-4, --ipv4 or -6, --ipv6
Tells rsync to prefer IPv4/IPv6 when creating sock-
ets. This only affects sockets that rsync has
direct control over, such as the outgoing socket
when directly contacting an rsync daemon. See also
these options in the --daemon mode section.
If rsync was complied without support for IPv6, the
--ipv6 option will have no effect. The --version
output will tell you if this is the case.
--checksum-seed=NUM
Set the MD4 checksum seed to the integer NUM. This
4 byte checksum seed is included in each block and
file MD4 checksum calculation. By default the
checksum seed is generated by the server and
defaults to the current time() . This option is
used to set a specific checksum seed, which is use-
ful for applications that want repeatable block and
file checksums, or in the case where the user wants
a more random checksum seed. Setting NUM to 0
causes rsync to use the default of time() for
checksum seed.
DAEMON OPTIONS
The options allowed when starting an rsync daemon are as
follows:
--daemon
This tells rsync that it is to run as a daemon.
The daemon you start running may be accessed using
an rsync client using the host::module or
rsync://host/module/ syntax.
If standard input is a socket then rsync will
assume that it is being run via inetd, otherwise it
will detach from the current terminal and become a
background daemon. The daemon will read the config
file (rsyncd.conf) on each connect made by a client
and respond to requests accordingly. See the
rsyncd.conf(5) man page for more details.
--address
By default rsync will bind to the wildcard address
when run as a daemon with the --daemon option. The
--address option allows you to specify a specific
IP address (or hostname) to bind to. This makes
virtual hosting possible in conjunction with the
--config option. See also the "address" global
option in the rsyncd.conf manpage.
--bwlimit=KBPS
This option allows you to specify a maximum trans-
fer rate in kilobytes per second for the data the
daemon sends. The client can still specify a
smaller --bwlimit value, but their requested value
will be rounded down if they try to exceed it. See
the client version of this option (above) for some
extra details.
--config=FILE
This specifies an alternate config file than the
default. This is only relevant when --daemon is
specified. The default is /etc/rsyncd.conf unless
the daemon is running over a remote shell program
and the remote user is not the super-user; in that
case the default is rsyncd.conf in the current
directory (typically $HOME).
--no-detach
When running as a daemon, this option instructs
rsync to not detach itself and become a background
process. This option is required when running as a
service on Cygwin, and may also be useful when
rsync is supervised by a program such as daemon-
tools or AIX's System Resource Controller.
--no-detach is also recommended when rsync is run
under a debugger. This option has no effect if
rsync is run from inetd or sshd.
--port=PORT
This specifies an alternate TCP port number for the
daemon to listen on rather than the default of 873.
See also the "port" global option in the
rsyncd.conf manpage.
--log-file=FILE
This option tells the rsync daemon to use the given
log-file name instead of using the "log file" set-
ting in the config file.
--log-file-format=FORMAT
This option tells the rsync daemon to use the given
FORMAT string instead of using the "log format"
setting in the config file. It also enables
"transfer logging" unless the string is empty, in
which case transfer logging is turned off.
--sockopts
This overrides the socket options setting in the
rsyncd.conf file and has the same syntax.
-v, --verbose
This option increases the amount of information the
daemon logs during its startup phase. After the
client connects, the daemon's verbosity level will
be controlled by the options that the client used
and the "max verbosity" setting in the module's
config section.
-4, --ipv4 or -6, --ipv6
Tells rsync to prefer IPv4/IPv6 when creating the
incoming sockets that the rsync daemon will use to
listen for connections. One of these options may
be required in older versions of Linux to work
around an IPv6 bug in the kernel (if you see an
"address already in use" error when nothing else is
using the port, try specifying --ipv6 or --ipv4
when starting the daemon).
If rsync was complied without support for IPv6, the
--ipv6 option will have no effect. The --version
output will tell you if this is the case.
-h, --help
When specified after --daemon, print a short help
page describing the options available for starting
an rsync daemon.
FILTER RULES
The filter rules allow for flexible selection of which
files to transfer (include) and which files to skip
(exclude). The rules either directly specify
include/exclude patterns or they specify a way to acquire
more include/exclude patterns (e.g. to read them from a
file).
As the list of files/directories to transfer is built,
rsync checks each name to be transferred against the list
of include/exclude patterns in turn, and the first match-
ing 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 pattern
is found, then the filename is not skipped.
Rsync builds an ordered list of filter rules as specified
on the command-line. Filter rules have the following syn-
tax:
RULE [PATTERN_OR_FILENAME]
RULE,MODIFIERS [PATTERN_OR_FILENAME]
You have your choice of using either short or long RULE
names, as described below. If you use a short-named rule,
the `,' separating the RULE from the MODIFIERS is
optional. The PATTERN or FILENAME that follows (when
present) must come after either a single space or an
underscore (_). Here are the available rule prefixes:
exclude, - specifies an exclude pattern.
include, + specifies an include pattern.
merge, . specifies a merge-file to read for more
rules.
dir-merge, : specifies a per-directory merge-file.
hide, H specifies a pattern for hiding files from
the transfer.
show, S files that match the pattern are not hid-
den.
protect, P specifies a pattern for protecting files
from deletion.
risk, R files that match the pattern are not pro-
tected.
clear, ! clears the current include/exclude list
(takes no arg)
When rules are being read from a file, empty lines are
ignored, as are comment lines that start with a "#".
Note that the --include/--exclude command-line options do
not allow the full range of rule parsing as described
above -- they only allow the specification of
include/exclude patterns plus a "!" token to clear the
list (and the normal comment parsing when rules are read
from a file). If a pattern does not begin with "- "
(dash, space) or "+ " (plus, space), then the rule will be
interpreted as if "+ " (for an include option) or "- "
(for an exclude option) were prefixed to the string. A
--filter option, on the other hand, must always contain
either a short or long rule name at the start of the rule.
Note also that the --filter, --include, and --exclude
options take one rule/pattern each. To add multiple ones,
you can repeat the options on the command-line, use the
merge-file syntax of the --filter option, or the
--include-from/--exclude-from options.
INCLUDE/EXCLUDE PATTERN RULES
You can include and exclude files by specifying patterns
using the "+", "-", etc. filter rules (as introduced in
the FILTER RULES section above). The include/exclude
rules each specify a pattern that is matched against the
names of the files that are going to be transferred.
These patterns can take several forms:
o if the pattern starts with a / then it is anchored
to a particular spot in the hierarchy of files,
otherwise it is matched against the end of the
pathname. This is similar to a leading ^ in regu-
lar expressions. Thus "/foo" would match a name of
"foo" at either the "root of the transfer" (for a
global rule) or in the merge-file's directory (for
a per-directory rule). An unqualified "foo" would
match a name of "foo" anywhere in the tree because
the algorithm is applied recursively from the top
down; it behaves as if each path component gets a
turn at being the end of the filename. Even the
unanchored "sub/foo" would match at any point in
the hierarchy where a "foo" was found within a
directory named "sub". See the section on
ANCHORING INCLUDE/EXCLUDE PATTERNS for a full dis-
cussion of how to specify a pattern that matches at
the root of the transfer.
o if the pattern ends with a / then it will only
match a directory, not a regular file, symlink, or
device.
o rsync chooses between doing a simple string match
and wildcard matching by checking if the pattern
contains one of these three wildcard characters:
`*', `?', and `[' .
o a `*' matches any path component, but it stops at
slashes.
o use '**' to match anything, including slashes.
o a `?' matches any character except a slash (/).
o a `[' introduces a character class, such as [a-z]
or [[:alpha:]].
o in a wildcard pattern, a backslash can be used to
escape a wildcard character, but it is matched lit-
erally when no wildcards are present.
o if the pattern contains a / (not counting a trail-
ing /) or a "**", then it is matched against the
full pathname, including any leading directories.
If the pattern doesn't contain a / or a "**", then
it is matched only against the final component of
the filename. (Remember that the algorithm is
applied recursively so "full filename" can actually
be any portion of a path from the starting direc-
tory on down.)
o a trailing "dir_name/***" will match both the
directory (as if "dir_name/" had been specified)
and everything in the directory (as if
"dir_name/**" had been specified). This behavior
was added in version 2.6.7.
Note that, when using the --recursive (-r) option (which
is implied by -a), every subcomponent of every path is
visited from the top down, so include/exclude patterns get
applied recursively to each subcomponent's full name (e.g.
to include "/foo/bar/baz" the subcomponents "/foo" and
"/foo/bar" must not be excluded). The exclude patterns
actually short-circuit the directory traversal stage when
rsync finds the files to send. If a pattern excludes a
particular parent directory, it can render a deeper
include pattern ineffectual because rsync did not descend
through that excluded section of the hierarchy. This is
particularly important when using a trailing `*' rule.
For instance, this won't work:
+ /some/path/this-file-will-not-be-found
+ /file-is-included
- *
This fails because the parent directory "some" is excluded
by the `*' rule, so rsync never visits any of the files in
the "some" or "some/path" directories. One solution is to
ask for all directories in the hierarchy to be included by
using a single rule: "+ */" (put it somewhere before the
"- *" rule), and perhaps use the --prune-empty-dirs
option. Another solution is to add specific include rules
for all the parent dirs that need to be visited. For
instance, this set of rules works fine:
+ /some/
+ /some/path/
+ /some/path/this-file-is-found
+ /file-also-included
- *
Here are some examples of exclude/include matching:
o "- *.o" would exclude all names matching *.o
o "- /foo" would exclude a file (or directory) named
foo in the transfer-root directory
o "- foo/" would exclude any directory named foo
o "- /foo/*/bar" would exclude any file named bar
which is at two levels below a directory named foo
in the transfer-root directory
o "- /foo/**/bar" would exclude any file named bar
two or more levels below a directory named foo in
the transfer-root directory
o The combination of "+ */", "+ *.c", and "- *" would
include all directories and C source files but
nothing else (see also the --prune-empty-dirs
option)
o The combination of "+ foo/", "+ foo/bar.c", and "-
*" would include only the foo directory and
foo/bar.c (the foo directory must be explicitly
included or it would be excluded by the "*")
MERGE-FILE FILTER RULES
You can merge whole files into your filter rules by speci-
fying either a merge (.) or a dir-merge (:) filter rule
(as introduced in the FILTER RULES section above).
There are two kinds of merged files -- single-instance
(`.') and per-directory (`:'). A single-instance merge
file is read one time, and its rules are incorporated into
the filter list in the place of the "." rule. For per-
directory merge files, rsync will scan every directory
that it traverses for the named file, merging its contents
when the file exists into the current list of inherited
rules. These per-directory rule files must be created on
the sending side because it is the sending side that is
being scanned for the available files to transfer. These
rule files may also need to be transferred to the receiv-
ing side if you want them to affect what files don't get
deleted (see PER-DIRECTORY RULES AND DELETE below).
Some examples:
merge /etc/rsync/default.rules
dir-merge .per-dir-filter
dir-merge,n- .non-inherited-per-dir-excludes
:n- .non-inherited-per-dir-excludes
The following modifiers are accepted after a merge or dir-
merge rule:
o A - specifies that the file should consist of only
exclude patterns, with no other rule-parsing except
for in-file comments.
o A + specifies that the file should consist of only
include patterns, with no other rule-parsing except
for in-file comments.
o A C is a way to specify that the file should be
read in a CVS-compatible manner. This turns on
`n', `w', and '-', but also allows the list-clear-
ing token (!) to be specified. If no filename is
provided, ".cvsignore" is assumed.
o A e will exclude the merge-file name from the
transfer; e.g. "dir-merge,e .rules" is like "dir-
merge .rules" and "- .rules".
o An n specifies that the rules are not inherited by
subdirectories.
o A w specifies that the rules are word-split on
whitespace instead of the normal line-splitting.
This also turns off comments. Note: the space that
separates the prefix from the rule is treated spe-
cially, so "- foo + bar" is parsed as two rules
(assuming that prefix-parsing wasn't also dis-
abled).
o You may also specify any of the modifiers for the
"+" or "-" rules (below) in order to have the rules
that are read in from the file default to having
that modifier set. For instance, "merge,-/ .excl"
would treat the contents of .excl as absolute-path
excludes, while "dir-merge,s .filt" and ":sC" would
each make all their per-directory rules apply only
on the sending side.
The following modifiers are accepted after a "+" or "-":
o A / specifies that the include/exclude rule should
be matched against the absolute pathname of the
current item. For example, "-/ /etc/passwd" would
exclude the passwd file any time the transfer was
sending files from the "/etc" directory, and "-/
subdir/foo" would always exclude "foo" when it is
in a dir named "subdir", even if "foo" is at the
root of the current transfer.
o A ! specifies that the include/exclude should take
effect if the pattern fails to match. For
instance, "-! */" would exclude all non-directo-
ries.
o A C is used to indicate that all the global CVS-
exclude rules should be inserted as excludes in
place of the "-C". No arg should follow.
o An s is used to indicate that the rule applies to
the sending side. When a rule affects the sending
side, it prevents files from being transferred.
The default is for a rule to affect both sides
unless --delete-excluded was specified, in which
case default rules become sender-side only. See
also the hide (H) and show (S) rules, which are an
alternate way to specify sending-side
includes/excludes.
o An r is used to indicate that the rule applies to
the receiving side. When a rule affects the
receiving side, it prevents files from being
deleted. See the s modifier for more info. See
also the protect (P) and risk (R) rules, which are
an alternate way to specify receiver-side
includes/excludes.
o A p indicates that a rule is perishable, meaning
that it is ignored in directories that are being
deleted. For instance, the -C option's default
rules that exclude things like "CVS" and "*.o" are
marked as perishable, and will not prevent a direc-
tory that was removed on the source from being
deleted on the destination.
Per-directory rules are inherited in all subdirectories of
the directory where the merge-file was found unless the
`n' modifier was used. Each subdirectory's rules are pre-
fixed to the inherited per-directory rules from its par-
ents, which gives the newest rules a higher priority than
the inherited rules. The entire set of dir-merge rules
are grouped together in the spot where the merge-file was
specified, so it is possible to override dir-merge rules
via a rule that got specified earlier in the list of
global rules. When the list-clearing rule ("!") is read
from a per-directory file, it only clears the inherited
rules for the current merge file.
Another way to prevent a single rule from a dir-merge file
from being inherited is to anchor it with a leading slash.
Anchored rules in a per-directory merge-file are relative
to the merge-file's directory, so a pattern "/foo" would
only match the file "foo" in the directory where the dir-
merge filter file was found.
Here's an example filter file which you'd specify via
--filter=". file":
merge /home/user/.global-filter
- *.gz
dir-merge .rules
+ *.[ch]
- *.o
This will merge the contents of the
/home/user/.global-filter file at the start of the list
and also turns the ".rules" filename into a per-directory
filter file. All rules read in prior to the start of the
directory scan follow the global anchoring rules (i.e. a
leading slash matches at the root of the transfer).
If a per-directory merge-file is specified with a path
that is a parent directory of the first transfer direc-
tory, rsync will scan all the parent dirs from that start-
ing point to the transfer directory for the indicated per-
directory file. For instance, here is a common filter
(see -F):
--filter=': /.rsync-filter'
That rule tells rsync to scan for the file .rsync-filter
in all directories from the root down through the parent
directory of the transfer prior to the start of the normal
directory scan of the file in the directories that are
sent as a part of the transfer. (Note: for an rsync dae-
mon, the root is always the same as the module's "path".)
Some examples of this pre-scanning for per-directory
files:
rsync -avF /src/path/ /dest/dir
rsync -av --filter=': ../../.rsync-filter'
/src/path/ /dest/dir
rsync -av --filter=': .rsync-filter' /src/path/
/dest/dir
The first two commands above will look for ".rsync-filter"
in "/" and "/src" before the normal scan begins looking
for the file in "/src/path" and its subdirectories. The
last command avoids the parent-dir scan and only looks for
the ".rsync-filter" files in each directory that is a part
of the transfer.
If you want to include the contents of a ".cvsignore" in
your patterns, you should use the rule ":C", which creates
a dir-merge of the .cvsignore file, but parsed in a CVS-
compatible manner. You can use this to affect where the
--cvs-exclude (-C) option's inclusion of the per-directory
.cvsignore file gets placed into your rules by putting the
":C" wherever you like in your filter rules. Without
this, rsync would add the dir-merge rule for the .cvsig-
nore file at the end of all your other rules (giving it a
lower priority than your command-line rules). For exam-
ple:
cat < out.dat
then look at out.dat. If everything is working correctly
then out.dat should be a zero length file. If you are get-
ting the above error from rsync then you will probably
find that out.dat contains some text or data. Look at the
contents and try to work out what is producing it. The
most common cause is incorrectly configured shell startup
scripts (such as .cshrc or .profile) that contain output
statements for non-interactive logins.
If you are having trouble debugging filter patterns, then
try specifying the -vv option. At this level of verbosity
rsync will show why each individual file is included or
excluded.
EXIT VALUES
0 Success
1 Syntax or usage error
2 Protocol incompatibility
3 Errors selecting input/output files, dirs
4 Requested action not supported: an attempt was made
to manipulate 64-bit files on a platform that can-
not support them; or an option was specified that
is supported by the client and not by the server.
5 Error starting client-server protocol
6 Daemon unable to append to log-file
10 Error in socket I/O
11 Error in file I/O
12 Error in rsync protocol data stream
13 Errors with program diagnostics
14 Error in IPC code
20 Received SIGUSR1 or SIGINT
21 Some error returned by waitpid()
22 Error allocating core memory buffers
23 Partial transfer due to error
24 Partial transfer due to vanished source files
25 The --max-delete limit stopped deletions
30 Timeout in data send/receive
35 Timeout waiting for daemon connection
ENVIRONMENT VARIABLES
CVSIGNORE
The CVSIGNORE environment variable supplements any
ignore patterns in .cvsignore files. See the
--cvs-exclude option for more details.
RSYNC_ICONV
Specify a default --iconv setting using this envi-
ronment variable.
RSYNC_RSH
The RSYNC_RSH environment variable allows you to
override the default shell used as the transport
for rsync. Command line options are permitted
after the command name, just as in the -e option.
RSYNC_PROXY
The RSYNC_PROXY environment variable allows you to
redirect your rsync client to use a web proxy when
connecting to a rsync daemon. You should set
RSYNC_PROXY to a hostname:port pair.
RSYNC_PASSWORD
Setting RSYNC_PASSWORD to the required password
allows you to run authenticated rsync connections
to an rsync daemon without user intervention. Note
that this does not supply a password to a remote
shell transport such as ssh; to learn how to do
that, consult the remote shell's documentation.
USER or LOGNAME
The USER or LOGNAME environment variables are used
to determine the default username sent to an rsync
daemon. If neither is set, the username defaults
to "nobody".
HOME The HOME environment variable is used to find the
user's default .cvsignore file.
FILES
/etc/rsyncd.conf or rsyncd.conf
SEE ALSO
rsyncd.conf(5)
BUGS
times are transferred as *nix time_t values
When transferring to FAT filesystems rsync may re-sync
unmodified files. See the comments on the --modify-window
option.
file permissions, devices, etc. are transferred as native
numerical values
see also the comments on the --delete option
Please report bugs! See the web site at
http://rsync.samba.org/
VERSION
This man page is current for version 3.0.5 of rsync.
INTERNAL OPTIONS
The options --server and --sender are used internally by
rsync, and should never be typed by a user under normal
circumstances. Some awareness of these options may be
needed in certain scenarios, such as when setting up a
login that can only run an rsync command. For instance,
the support directory of the rsync distribution has an
example script named rrsync (for restricted rsync) that
can be used with a restricted ssh login.
CREDITS
rsync is distributed under the GNU public license. See
the file COPYING for details.
A WEB site is available at http://rsync.samba.org/. The
site includes an FAQ-O-Matic which may cover questions
unanswered by this manual page.
The primary ftp site for rsync is
ftp://rsync.samba.org/pub/rsync.
We would be delighted to hear from you if you like this
program. Please contact the mailing-list at
rsync@lists.samba.org.
This program uses the excellent zlib compression library
written by Jean-loup Gailly and Mark Adler.
THANKS
Especial thanks go out to: John Van Essen, Matt McCutchen,
Wesley W. Terpstra, David Dykstra, Jos Backus, Sebastian
Krahmer, Martin Pool, and our gone-but-not-forgotten com-
padre, J.W. Schultz.
Thanks also to Richard Brent, Brendan Mackay, Bill Waite,
Stephen Rothwell and David Bell. I've probably missed
some people, my apologies if I have.
AUTHOR
rsync was originally written by Andrew Tridgell and Paul
Mackerras. Many people have later contributed to it. It
is currently maintained by Wayne Davison.
Mailing lists for support and development are available at
http://lists.samba.org
28 Dec 2008 rsync(1)