rsync
是一个常用的 Linux 工具, 用于文件同步。它支持本地计算机与远程计算机之间, 或者两个本地目录之间同步文件, 但不支持两台远程计算机之间的直接同步。rsync 也可以作为文件复制工具, 替代 cp
和 mv
命令。
rsync
中的 r
表示 remote (远程), 即 “远程同步”。与 FTP 或 SCP 等文件传输工具不同, rsync 的最大特点是它会检查发送方和接收方已有的文件, 只传输有变化的部分 (默认情况下基于文件大小或修改时间进行比较)
rsync 基本特点
- 可以镜像保存整个目录树和文件系统
- 可以保持原文件的权限、时间戳、软硬链接等
- 无需特殊权限即可安装
- 通过优化的流程, 提供高效的文件传输
- 支持 rcp、ssh 等传输方式, 也支持直接使用 socket 连接
- 支持匿名传输
安装 rsync
传输的双方都必须安装 rsync
。以下是常见 Linux 发行版的安装命令
# Debian 系列
sudo apt-get install rsync
# Red Hat 系列
sudo yum install rsync
# Arch Linux
sudo pacman -S rsync
服务端配置文件 rsyncd.conf
创建 rsync
配置文件和密码文件
mkdir -p ~/.config/rsync
# 创建配置文件
vim ~/.config/rsync/rsyncd.conf
root 用户配置
该配置适用于 root 用户运行
# /etc/rsyncd: configuration file for rsync daemon mode
# See rsyncd.conf man page for more options.
# Configuration example:
uid=root # 以指定的 UID 传输文件
gid=root # 以指定的 GID 传输文件
#use chroot=yes
#max connections=10 # 允许的最大连接数
pid file=/var/run/rsyncd.pid # 指定 PID 文件路径
lock file=/var/run/rsync.lock # 指定进程锁文件
log file=/home/user/.config/rsync/rsyncd.log # 指定日志路径
#exclude = lost+found/
#transfer logging = yes
timeout=600 # 连接超时时间
#ignore nonreadable = yes
#dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
#hosts allow=10.50.53.100 # 允许指定主机访问
#hosts deny=0.0.0.0/32 # 阻止指定主机访问
port=5000 # 指定 TCP 端口
[backup] # 模块名称, 客户端访问时指定
path=/data # 模块目录
comment=rsync files # 描述信息
read only=no # 允许写入
list=yes # 允许列出文件
auth users=root # 认证用户, 服务器必须存在这个系统用户
secrets file=/home/user/.config/rsync/rsyncd.passwd
普通用户配置
对于普通用户的配置
uid
和gid
必须删除, 否则会报错setgroups failed: Operation not permitted
use chroot
必须设置为no
, 否则会报错rsync: chroot /path failed: Operation not permitted (1)
use chroot=no
max connections=640
lock file=/home/user/.config/rsync/rsync.lock
log file=/home/user/.config/rsync/rsyncd.log
timeout=600
port=5000
[user] # 用户模块
path=/home/user/data/
comment=rsync files
read only=no
list=yes
创建密码文件 rsyncd.passwd
-
用户名:
root
-
密码:
51522zzwlwlbb
(已加入字典)
配置密码文件并设置适当的权限
[root@centos7 ~]# vim ~/.config/rsync/rsyncd.passwd
root:51522zzwlwlbb
# 设置权限
chmod 600 ~/.config/rsync/rsyncd.passwd
启动 rsync 服务端
rsync --daemon --config=/home/user/.config/rsync/rsyncd.conf
rsync 客户端同步操作
客户端运行在 root 用户和普通用户时客户端的命令有所不同
root 用户
# 保持客户端与服务器端的数据一致
rsync -avzP --delete root@10.121.215.48::backup .
# 将服务器 10.121.215.48 中 root 文件夹中的数据同步到当前目录
rsync -avzP root@10.121.215.48::backup .
# 保持服务器端与客户端数据一致
rsync -avzP --delete . root@10.121.215.48::backup .
# 使用指定的密码文件, 密码文件权限为 600
rsync -avzP --delete --password-file=/etc/rsyncd.pass root@10.121.215.48::backup .
# 设置 (文件夹 770) 和 (文件 660) 权限, 并且设置所有者为 qaq
# 文件权限要 -p 参数, 所有者要 -go 参数
rsync -rptgo --chmod=Du=rwx,Dg=rwx,Do=,Fu=rw,Fg=rw,Fo= --chown=qaq:qaq --progress user@sub.example.com:data/directory/ ./directory/
普通用户
# 列出目录列表
rsync --list-only --port=5000 sub.example.com::user
# 保持客户端与服务器端的数据一致
rsync -avzP --delete --port=5000 sub.example.com::user .
rsync -av --progress user@sub.example.com:/home/user/ /home/user/
基本用法
-r
参数
-r
表示递归同步, 即包括子目录。可以将源目录同步到目标目录, 替代 cp
或 mv
命令
rsync -r source destination
source
目录表示源目录, destination
表示目标目录。
如果有多个文件或目录需要同步, 可以写成这样
rsync -r source1 source2 destination
上面命令中, source1
、source2
都会被同步到 destination
目录
-a
参数
-a
参数可以替代 -r
是它扩展, 它不仅递归同步, 还保持文件的元信息 (如修改时间、权限等)。由于 rsync 默认使用文件大小和修改时间决定文件是否需要更新, 所以 -a
比 -r
更有用。下面的用法才是常见的写法
rsync -a source destination
如果目标目录 (destination) 不存在, rsync 会自动创建。执行上面的命令后, 源目录 (source) 被完整地复制到了目标目录 (destination) 下面, 即形成了 destination/source
的目录结构
如果只想同步源目录 (source) 里面的内容到目标目录 (destination), 则需要在源目录后面加上斜杠
rsync -a source/ destination
上面命令执行后, 源目录 (source) 里面的内容, 就都被复制到了目标目录 (destination) 里面, 并不会在 destination
下面创建一个 source
子目录
-n
参数
如果不确定 rsync 执行后的操作结果, 可以使用 -n
或 --dry-run
参数模拟执行的结果
rsync -anv source/ destination
上面命令中, -n
参数模拟命令执行的结果, 并不真的执行命令。-v
参数则是将结果输出到终端, 这样就可以看到哪些内容会被同步
--delete
参数
默认情况下, rsync 只确保源目录的所有内容都复制到目标目录 (明确排除的文件除外), 不会删除目标目录中不再存在于源目录的文件。它不会使两个目录保持相同, 如果希望目标目录成为源目录的镜像副本, 则必须使用 --delete
参数, 这将删除只存在于目标目录、不存在于源目录的文件
rsync -av --delete source/ destination
上面命令中, --delete
参数会使得 destination
成为 source
的一个镜像
排除文件
--exclude
参数
有时, 我们希望同步时排除某些文件或目录, 这时可以用 --exclude
参数指定排除模式
rsync -av --exclude='*.txt' source/ destination
# 或者
rsync -av --exclude '*.txt' source/ destination
上面命令排除了所有 TXT 文件
注意, rsync 会同步以 “点” 开头的隐藏文件, 如果要排除隐藏文件, 可以这样写
rsync -av --exclude='.*' source/ destination
如果要排除某个目录里面的所有文件, 但不希望排除目录本身, 可以写成下面这样
rsync -av --exclude 'dir1/*' source/ destination
多个排除模式, 可以用多个 --exclude
参数
rsync -av --exclude 'file1.txt' --exclude 'dir1/*' source/ destination
多个排除模式也可以利用 bash 的大扩号的扩展功能, 只用一个 --exclude
参数
rsync -av --exclude={'file1.txt','dir1/*'} source/ destination
如果排除模式很多, 可以将它们写入一个文件, 每个模式一行, 然后用 --exclude-from
参数指定这个文件
rsync -av --exclude-from='exclude-file.txt' source/ destination
--include
参数
--include
参数用来指定必须同步的文件模式, 往往与 --exclude
结合使用。
使用 --include
指定必须同步的文件, 并结合 --exclude
进行排除
# 排除所有文件, 但是包括所有 TXT 文件
rsync -av --include='*.txt' --include='*/' --exclude='*' source/ destination
rsync -avzP --include='*.txt' --include='data/' --exclude='*' user@sub.example.com:/home/user/data .
rsync -avzP --include='source*' --exclude='*' user@sub.example.com:/home/user/data/ . --list-only
远程同步
rsync 除了支持本地两个目录之间的同步, 也支持远程同步。它可以将本地内容, 同步到远程服务器。
通过 SSH 协议
将本地内容同步到远程服务器
rsync -av source/ username@remote_host:destination
也可以将远程内容同步到本地
rsync -av username@remote_host:source/ destination
rsync 默认使用 SSH 进行远程登录和数据传输
由于早期 rsync 不使用 SSH 协议, 需要用 -e
参数指定协议, 后来才改的。所以, 下面 -e ssh
可以省略
rsync -av -e ssh source/ user@remote_host:/destination
但是, 如果 ssh 命令有附加的参数, 则必须使用 -e
参数指定所要执行的 SSH 命令
rsync -av -e 'ssh -p 2234' source/ user@remote_host:/destination
上面命令中, -e
参数指定 SSH 使用 2234
端口
通过 rsync 协议
除了使用 SSH, 如果另一台服务器安装并运行了 rsync 守护程序, 则也可以用 rsync://
协议 (默认端口 87
) 进行传输。具体写法是服务器与目标目录之间使用双冒号分隔 ::
rsync -av source/ 192.168.122.32::module/destination
注意, 上面地址中的 module 并不是实际路径名, 而是 rsync 守护程序指定的一个资源名, 由管理员分配
如果想知道 rsync 守护程序分配的所有资源名列表, 可以执行下面命令
rsync rsync://192.168.122.32
rsync 协议除了使用双冒号, 也可以直接用 rsync://
协议指定地址
rsync -av source/ rsync://192.168.122.32/module/destination
增量备份
rsync 的增量备份功能是其最大的特色。第一次同步是全量备份, 后续同步仅传输有变动的部分。除了源目录与目标目录直接比较, rsync 还支持使用基准目录, 即将源目录与基准目录之间变动的部分, 同步到目标目录。
具体原理是, 第一次同步是全量备份, 将所有文件从源目录同步到基准目录中。之后的每次同步都是增量备份, 仅同步源目录与基准目录之间发生变动的部分, 并将这些变动的文件保存在一个新的目标目录中。新的目标目录中包含所有文件, 但实际上只有发生变动的文件是真实存在的, 其他未变动的文件则通过硬链接指向基准目录中的对应文件。
使用 --link-dest
参数可以指定基准目录, 从而执行增量备份
rsync -a --delete --link-dest /compare/path /source/path /target/path
这个命令将源目录与基准目录进行比较, 找出变动的文件, 复制到目标目录, 未变动的文件则通过硬链接保存在目标目录
脚本示例
备份用户的主目录
#!/bin/bash
# A script to perform incremental backups using rsync
set -o errexit
set -o nounset
set -o pipefail
readonly SOURCE_DIR="${HOME}"
readonly BACKUP_DIR="/mnt/data/backups"
readonly DATETIME="$(date '+%Y-%m-%d_%H:%M:%S')"
readonly BACKUP_PATH="${BACKUP_DIR}/${DATETIME}"
readonly LATEST_LINK="${BACKUP_DIR}/latest"
mkdir -p "${BACKUP_DIR}"
rsync -av --delete \
"${SOURCE_DIR}/" \
--link-dest "${LATEST_LINK}" \
--exclude=".cache" \
"${BACKUP_PATH}"
rm -rf "${LATEST_LINK}"
ln -s "${BACKUP_PATH}" "${LATEST_LINK}"
上面脚本中, 每次同步都会创建一个新目录 ${BACKUP_DIR}/${DATETIME}
, 并通过软链接 ${BACKUP_DIR}/latest
指向该目录。在下一次备份时, 脚本会将 ${BACKUP_DIR}/latest
作为基准目录, 通过 --link-dest
选项生成新的备份目录。备份完成后, 软链接 ${BACKUP_DIR}/latest
会更新为指向最新生成的备份目录
命令行参数解释
-v, --verbose # 详细模式输出, -vv 表示输出更详细的信息, -vvv 表示输出最详细的信息
-q, --quiet # 精简输出模式
-c, --checksum # 改变 rsync 的校验方式
# 默认情况下, rsync 只检查文件的大小和最后修改日期是否发生变化, 如果发生变化, 就重新传输。使用这个参数以后, 则通过判断文件内容的校验和, 决定是否重新传输
-a, --archive # 归档模式, 保存所有的元数据, 比如修改时间、权限、所有者等, 并且软链接也会同步过去, 等于 -rlptgoD
--append # 文件接着上次中断的地方, 继续传输
--append-verify # 跟 --append 参数类似, 但会对传输完成后的文件进行一次校验。如果校验失败, 将重新发送整个文件
-r, --recursive # 对子目录以递归模式处理, 即包含子目录
-R, --relative # 使用相对路径信息
-b, --backup # 创建备份, 也就是对于目的已经存在有同样的文件名时, 将老的文件重新命名为 ~filename。更名规则是添加由 --suffix 选项来指定不同的备份文件前缀, 默认是 ~
--backup-dir # 指定文件备份时存放的目录 比如 /path/to/backups/~filename 存放在在目录下
--suffix=SUFFIX # 指定文件名备份时, 对文件名添加的后缀, 默认是 ~
-u, --update # 同步时跳过目标目录上修改时间较新的文件
-l, --links # 保留软链结
--link-dest # 指定增量备份的基准目录
-L, --copy-links # 想对待常规文件一样处理软链结
--copy-unsafe-links # 仅仅拷贝指向 SRC 路径目录树以外的链结
--safe-links # 忽略指向 SRC 路径目录树以外的链结
-H, --hard-links # 保留硬链结
-p, --perms # 保持文件权限
-o, --owner # 保持文件属主信息
-g, --group # 保持文件属组信息
-D, --devices # 保持设备文件信息
-t, --times # 保持文件时间信息
-S, --sparse # 对稀疏文件进行特殊处理以节省DST的空间
-n, --dry-run # 模拟将要执行的操作, 而并不真的执行。配合 -v 参数使用, 可以看到哪些内容会被同步过去
-W, --whole-file # 拷贝文件, 不进行增量检测
-x, --one-file-system # 不要跨越文件系统边界
-B, --block-size=SIZE # 检验算法使用的块尺寸, 默认是 700 字节
-e, --rsh=COMMAND # 指定使用 rsh、ssh 协议传输数据
--rsync-path=PATH # 指定远程服务器上的 rsync 命令所在路径信息
-C, --cvs-exclude # 使用和 CVS 一样的方法自动忽略文件, 用来排除那些不希望传输的文件
--existing, --ignore-non-existing # 仅已经存在于目标目录的文件, 不同步目标目录中不存在的文件和目录
--delete # 删除只存在于目标目录、不存在于源目标的文件, 保证目标目录是源目标的镜像
--delete-excluded # 同样删除接收端那些被该选项指定排除的文件
--delete-after # 传输结束以后再删除
--ignore-errors # 及时出现 IO 错误也进行删除
--ignore-existing # 只要该文件在目标目录中已经存在, 就跳过去, 不再同步这些文件
-m # 不同步空目录
--max-size # 参数设置传输的最大文件的大小限制, 比如不超过 200KB (--max-size='200k')
--min-size # 参数设置传输的最小文件的大小限制, 比如不小于 10KB (--min-size=10k)
--max-delete=NUM # 最多删除 NUM 个文件
--partial # 允许恢复中断的传输。不使用该参数时, rsync 会删除传输到一半被打断的文件, 使用该参数后, 传输到一半的文件也会同步到目标目录, 下次同步时再恢复中断的传输。一般需要与 --append 或 --append-verify 配合使用
--partial-dir # 指定将传输到一半的文件保存到一个临时目录, 比如 --partial-dir=.rsync-partial。一般需要与 --append 或 --append-verify 配合使用
--progress # 在传输时显示传输过程
-P # 是 --progress 和 --partial 这两个参数的结合
--force # 强制删除目录, 即使不为空
--numeric-ids # 不将数字的用户和组 ID 匹配为用户名和组名
--timeout=TIME # IP 超时时间, 单位为秒
-I, --ignore-times # 不跳过那些有同样的时间和长度的文件
-i # 输出源目录与目标目录之间文件差异的详细情况
--size-only # 表示只同步大小有变化的文件, 不考虑文件修改时间的差异
--modify-window=NUM # 决定文件是否时间相同时使用的时间戳窗口, 默认为 0
-T --temp-dir=DIR # 在 DIR 中创建临时文件
--compare-dest=DIR # 同样比较 DIR 中的文件来决定是否需要备份
-z, --compress # 对备份的文件在传输时进行压缩处理
--exclude=PATTERN # 排除不进行同步的文件, 比如 --exclude="*.iso"
--include=PATTERN # 同步时要包括的文件, 一般与 --exclude 结合使用
--exclude-from=FILE # 指定一个本地文件, 里面是需要排除的文件模式, 每个模式一行
--include-from=FILE # 不排除 FILE 指定模式匹配的文件
--version # 打印版本信息
--address # 绑定到特定的地址
--config=FILE # 指定其他的配置文件, 不使用默认的 rsyncd.conf 文件
--port=PORT # 指定其他的 rsync 服务端口
--blocking-io # 对远程 shell 使用阻塞 IO
-stats # 给出某些文件的传输状态
--log-format=formAT # 指定日志文件格式
--password-file=FILE # 从 FILE 中得到密码
--bwlimit=KBPS # 带宽限制, 默认单位是 KB/s, 比如 --bwlimit=100
--remove-source-files # 传输成功后, 删除发送方的文件
-h, --human-readable # 以人类可读的格式输出
-h, --help # 显示帮助信息 (-h 单独使用时显示帮助)
完整命令行帮助
[root@centos7 ~]# rsync -h
rsync version 3.1.2 protocol version 31
Copyright (C) 1996-2015 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
append, ACLs, xattrs, iconv, symtimes, prealloc
rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you
are welcome to redistribute it under certain conditions. See the GNU
General Public Licence for details.
rsync is a file transfer program capable of efficient remote update
via a fast differencing algorithm.
Usage: rsync [OPTION]... SRC [SRC]... DEST
or rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
or rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
or rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST
or rsync [OPTION]... [USER@]HOST:SRC [DEST]
or rsync [OPTION]... [USER@]HOST::SRC [DEST]
or rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
The ':' usages connect via remote shell, while '::' & 'rsync://' usages connect
to an rsync daemon, and require SRC or DEST to start with a module name.
Options
-v, --verbose increase verbosity
--info=FLAGS fine-grained informational verbosity
--debug=FLAGS fine-grained debug verbosity
--msgs2stderr special output handling for debugging
-q, --quiet suppress non-error messages
--no-motd suppress daemon-mode MOTD (see manpage 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 set backup suffix (default ~ w/o --backup-dir)
-u, --update skip files that are newer on the receiver
--inplace update destination files in-place (SEE MAN PAGE)
--append append data onto shorter files
--append-verify like --append, but with 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 source tree
--munge-links munge symlinks to make them safer (but unusable)
-k, --copy-dirlinks transform symlink to a 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 the file's executability
--chmod=CHMOD affect file and/or directory permissions
-A, --acls preserve ACLs (implies --perms)
-X, --xattrs preserve extended attributes
-o, --owner preserve owner (super-user only)
-g, --group preserve group
--devices preserve device files (super-user only)
--copy-devices copy device contents as regular file
--specials preserve special files
-D same as --devices --specials
-t, --times preserve modification times
-O, --omit-dir-times omit directories from --times
-J, --omit-link-times omit symlinks from --times
--super receiver attempts super-user activities
--fake-super store/recover privileged attrs using xattrs
-S, --sparse handle sparse files efficiently
--preallocate allocate dest files before writing them
-n, --dry-run perform a trial run with no changes made
-W, --whole-file copy files whole (without 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 the remote machine
--existing skip creating new files on receiver
--ignore-existing skip updating files that already exist on receiver
--remove-source-files sender removes synchronized files (non-dirs)
--del an alias for --delete-during
--delete delete extraneous files from destination dirs
--delete-before receiver deletes before transfer, not during
--delete-during receiver deletes during the transfer
--delete-delay find deletions during, delete after
--delete-after receiver deletes after transfer, not during
--delete-excluded also delete excluded files from destination dirs
--ignore-missing-args ignore missing source args without error
--delete-missing-args delete missing source args from destination
--ignore-errors delete even if there are I/O errors
--force force deletion of directories 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 transfer's end
-m, --prune-empty-dirs prune empty directory chains from the file-list
--numeric-ids don't map uid/gid values by user/group name
--usermap=STRING custom username mapping
--groupmap=STRING custom groupname mapping
--chown=USER:GROUP simple username/groupname mapping
--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 in size and mod-time
-M, --remote-option=OPTION send OPTION to the remote side only
--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 destination 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 a suffix in LIST
-C, --cvs-exclude auto-ignore files 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; only wildcard special-chars
--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=RATE limit socket I/O bandwidth
--outbuf=N|L|B set output buffering to None, Line, or Block
--write-batch=FILE write a batched update to FILE
--only-write-batch=FILE like --write-batch but w/o updating destination
--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 (-h is --help only if used alone)
Use "rsync --daemon --help" to see the daemon-mode command-line options.
Please see the rsync(1) and rsyncd.conf(5) man pages for full documentation.
See http://rsync.samba.org/ for updates, bug reports, and answers
原文
rsync 用法教程
Rsync command issues, owner and group permissions doesn´t change
How to change the owner for a rsync
How to set file/folder permissions using Rsync from Windows to Linux