Linux rsync是一个用于在本地或远程系统之间同步文件和目录的强大工具。它可以在文件传输过程中快速识别并传输只有变化部分的内容,因此通常比传统的cp命令更快。

1、命令简介

rsync:更快、更灵活地替代RCP,可以根据需求使用各种选项来定制同步操作。

2、命令语法

rsync [OPTION]... SRC [SRC]... DEST
rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST
rsync [OPTION]... SRC
rsync [OPTION]... [USER@]HOST:SRC [DEST]
rsync [OPTION]... [USER@]HOST::SRC [DEST]
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]

3、命令描述

rsync是一个行为方式与RCP基本相同的程序,但有更多的选项,并使用rsync远程更新协议在更新目标文件时大大加快文件传输速度。

rsync远程更新协议可以rsync通过网络连接传输两组文件之间的差异,使用技术报告中描述的有效的校验和搜索算法。rsync是一个与rcp非常相似的程序,但是有更多的选项,并且在更新目标文件时使用rsync远程更新协议大大加快文件传输速度。

rsync远程更新协议可以rsync通过网络连接传输两组文件之间的差异,使用本包附带的技术报告中描述的有效校验和搜索算法。

4、命令选项

选项

描述

-v, --verbose

提高详细性

--info=FLAGS

精细粒度的信息详细性

--debug=FLAGS

精细粒度的调试详细性

--msgs2stderr

用于调试的特殊输出处理

-q, --quiet

抑制非错误消息

--no-motd

抑制守护进程模式的MOTD(参见手册页警告)

-c, --checksum

基于校验和跳过,而不是修改时间和大小

-a, --archive

归档模式;等于

-rlptgoD

(不包括

-H,-A,-X

--no-OPTION

关闭隐含的 OPTION(例如

--no-D

-r, --recursive

递归进入目录

-R, --relative

使用相对路径名

--no-implied-dirs

使用

--relative

时不发送隐含的目录

-b, --backup

创建备份(参见

--suffix

和--backup-dir)

--backup-dir=DIR

在 DIR 指定的层次结构中创建备份

--suffix=SUFFIX

设置备份后缀(默认为

~,除非使用

--backup-dir

-u, --update

跳过在接收方更新的文件

--inplace

原地更新目标文件(参见手册页)

--append

将数据追加到较短的文件上

--append-verify

类似于

--append

,但包含文件中的旧数据校验和

-d, --dirs

仅传输目录而不递归

-l, --links

将符号链接复制为符号链接

-L, --copy-links

将符号链接转换为引用文件/目录

--copy-unsafe-links

仅转换“不安全”的符号链接

--safe-links

忽略指向源树外部的符号链接

--munge-links

修改符号链接以使其更安全(但无法使用)

-k, --copy-dirlinks

将指向目录的符号链接转换为引用目录

-K, --keep-dirlinks

将接收方上的符号链接目录视为目录

-H, --hard-links

保留硬链接

-p, --perms

保留权限

-E, --executability

保留文件的可执行性

--chmod=CHMOD

影响文件和/或目录的权限

-A, --acls

保留ACL(隐含

--perms

-X, --xattrs

保留扩展属性

-o, --owner

保留文件拥有者(仅超级用户)

-g, --group

保留文件组

--devices

保留设备文件(仅超级用户)

--copy-devices

将设备内容复制为普通文件

--specials

保留特殊文件

-D

等同于

--devices

--specials

-t, --times

保留修改时间

-O, --omit-dir-times

--times

中省略目录

-J, --omit-link-times

--times

中省略符号链接

--super

接收方尝试超级用户活动

--fake-super

使用扩展属性存储/恢复特权属性

-S, --sparse

高效处理稀疏文件

--preallocate

在写入之前分配目标文件

-n, --dry-run

进行试运行,不进行任何更改

-W, --whole-file

完整复制文件(不使用增量传输算法)

-x, --one-file-system

不跨越文件系统边界

-B, --block-size=SIZE

强制使用固定的校验和块大小

-e, --rsh=COMMAND

指定要使用的远程shell

--rsync-path=PROGRAM

指定在远程机器上运行的rsync

--existing

跳过在接收方创建新文件

--ignore-existing

跳过在接收方已存在的文件的更新

--remove-source-files

发送方删除已同步的文件(非目录)

--del

等同于

--delete-during

的别名

--delete

从目标目录中删除多余的文件

--delete-before

在传输之前,接收方删除文件,而不是在传输过程中

--delete-during

在传输过程中,接收方删除文件

--delete-delay

在传输过程中查找删除项,传输后删除

--delete-after

在传输之后,接收方删除文件,而不是在传输过程中

--delete-excluded

也从目标目录中删除被排除的文件

--ignore-missing-args

忽略丢失的源参数而不报错

--delete-missing-args

从目标中删除丢失的源参数

--ignore-errors

即使有I/O错误也删除

--force

强制删除目录,即使目录不为空

--max-delete=NUM

不删除超过NUM个文件

--max-size=SIZE

不传输大于SIZE的任何文件

--min-size=SIZE

不传输小于SIZE的任何文件

--partial

保留部分传输的文件

--partial-dir=DIR

将部分传输的文件放入DIR中

--delay-updates

在传输结束时将所有更新的文件放入正确的位置

-m, --prune-empty-dirs

从文件列表中删除空的目录链

--numeric-ids

不使用用户名/组名映射uid/gid

--usermap=STRING

自定义用户名映射

--groupmap=STRING

自定义组名映射

--chown=USER:GROUP

简单的用户名/组名映射

--timeout=SECONDS

设置I/O超时时间(以秒为单位)

--contimeout=SECONDS

设置守护进程连接超时时间(以秒为单位)

-I, --ignore-times

不跳过大小和修改时间相匹配的文件

-M, --remote-option=OPTION

仅将OPTION发送到远程端

--size-only

跳过大小匹配的文件

--modify-window=NUM

以较低的精度比较修改时间

-T, --temp-dir=DIR

在目录DIR中创建临时文件

-y, --fuzzy

如果没有目标文件,则查找相似的文件作为基础

--compare-dest=DIR

也相对于DIR比较目标文件

--copy-dest=DIR

并包含未更改文件的副本

--link-dest=DIR

当文件未更改时,与DIR中的文件进行硬链接

-z, --compress

在传输过程中压缩文件数据

--compress-level=NUM

明确设置压缩级别

--skip-compress=LIST

跳过列表中后缀的文件压缩

-C, --cvs-exclude

以与CVS相同的方式自动忽略文件

-f, --filter=RULE

添加一个文件过滤规则RULE

-F

等同于

--filter='dir-merge /.rsync-filter'

--exclude=PATTERN

排除与PATTERN匹配的文件

--exclude-from=FILE

从FILE中读取排除模式

--include=PATTERN

不排除与PATTERN匹配的文件

--include-from=FILE

FILE中读取包含模式

--files-from=FILE

FILE中读取源文件名的列表

-0, --from0

所有

*-from/filter

文件都以0分隔

-s, --protect-args

不分割空格;仅使用通配符特殊字符

--address=ADDRESS

绑定地址,用于到守护进程的出站套接字

--port=PORT

指定双冒号备用端口号

--sockopts=OPTIONS

指定自定义TCP选项

--blocking-io

对远程shell使用阻塞I/O

--stats

给出一些文件传输统计信息

-8, --8-bit-output

在输出中不转义高位字符

-h, --human-readable

以人类可读的格式输出数字

--progress

在传输过程中显示进度

-P

等同于

--partial --progress

-i, --itemize-changes

输出所有更新的更改摘要

--out-format=FORMAT

使用指定的FORMAT输出更新

--log-file=FILE

将我们的操作记录到指定的FILE

--log-file-format=FMT

使用指定的FMT记录更新

--password-file=FILE

从FILE中读取守护进程访问密码

--list-only

列出文件而不是复制它们

--bwlimit=RATE

限制套接字I/O带宽

--outbuf=N|L|B  

设置缓冲为None、行或块

--write-batch=FILE

将批处理更新写入到FILE

--only-write-batch=FILE

类似于--write-batch

,但不更新目标

--read-batch=FILE

从FILE中读取批处理更新

--protocol=NUM

强制使用较旧的协议版本

--iconv=CONVERT_SPEC

请求文件名的字符集转换

--checksum-seed=NUM

设置块/文件校验和种子(高级)

-4, --ipv4

优先使用IPv4

-6, --ipv6

优先使用IPv6

--version

打印版本号

(-h) --help

显示此帮助(仅当单独使用时,

-h才等同于--help)

5、使用示例

1)将本地目录复制到远程主机

rsync -avz /本地路径/ 用户名@远程服务器IP地址:/远程路径/

2)从远程主机复制目录到本地:

rsync -avz 用户名@远程服务器IP地址:/远程路径/ /本地路径/

3)使用SSH协议进行远程复制

rsync -avz -e ssh 用户名@远程服务器IP地址:/远程路径/ /本地路径/

4)仅列出远程主机上的文件而不复制

rsync -avz --list-only 用户名@远程服务器IP地址:/远程路径/

5)使用rsync进行增量备份:

rsync -avz --delete /data/ /backup/

--delete 选项会删除 /backup 中那些在 /data 中不存在的文件,确保 /backup/data 的一个精确镜像。

6)限制传输带宽

rsync -avz --bwlimit=1000 用户名@远程服务器IP地址:/远程路径/ /本地路径/

命令将限制 rsync 的传输速度为每秒 1000 KB

7)目录复制并预先分配目标文件的空间

rsync -avz --preallocate 用户名@远程服务器IP地址:/path/to/destination/ /path/to/source/

推荐文档