Fork me on GitHub

N天学习一个linux命令之rsync

用途

主要用于本地和远程主机同步文件

特性

1 使用增量传输算法(delta-transfer algorithm)
2 支持ssh,rsync协议
3 可以用于本地同步文件
4 本地和远程主机都需要安装rsync命令

用法

本地同步

rsync [OPTION...] SRC... [DEST]

远程同步

# ssh
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST

# rsync
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

常用选项

--help
显示帮助信息

--version
显示命令版本

-v, --verbose
输出更加详细的信息

-q, --quiet
尽可能少输出信息

-I, --ignore-times
默认情况下,rsync会忽略文件大小一样且修改时间相同的文件,这样可以提高检查速度。带上这个参数会每次都检查

--size-only
默认情况下会检查文件大小和最后修改时间,这个参数告诉程序只检查大小,适应于没有时间戳的场景

-c, --checksum
使用校验和比较文件差异

-a, --archive
跟-rlptgoD这些选项一样的意思,递归整个目录,保持文件属性,不包含硬链接文件

--no-OPTION
关闭OPTION选项,前后顺序很重要

-r, --recursive
递归复制

-R, --relative
使用相对路径,发送方整个路径都会包含

--no-implied-dirs
排除链接

-b, --backup
备份

--backup-dir=DIR
设置备份目录

--suffix=SUFFIX
备份文件后缀,默认是~

-u, --update
忽略那些已存在且文件修改时间戳比发送方还新的文件

-l, --links
重新创建软链

-L, --copy-links
复制软链指向的文件

--copy-unsafe-links
复制软链,不管有没有包含在被复制的目录里

--safe-links
不复制目录树外的软链

-k, --copy-dirlinks
软链当做目录处理

-K, --keep-dirlinks

-H, --hard-links

-p, --perms
保留权限

--existing, --ignore-non-existing
不同步新文件

--ignore-existing
不同步已存在的文件

--delete
删除不存在的文件

--delete-excluded
删除指定的文件

--ignore-errors
忽略错误

--max-size=SIZE
指定最大的传输文件大小,超过了不同步

--min-size=SIZE
指定最小的传输文件大小,小于不同步

--rsync-path=PROGRAM
指定远程服务器执行的程序路径

--exclude=PATTERN
需要排除的文件

--include=PATTERN
指定同步的文件

--files-from=FILE
从FILE文件读取需要同步的文件列表

-s, --protect-args
不转义参数,不展开参数

-z, --compress
传输时压缩数据

--skip-compress=LIST
不需要压缩的文件扩展名列表,多个使用/分隔

--stats
显示统计信息

-h, --human-readable
人类可读方式格式化

--partial
开启断点续传

--partial-dir=DIR

--progress
显示进度

--list-only
只显示,不同步

--bwlimit=KBPS
指定传输最大的速率,单位(a maximum transfer rate in kilobytes per second)

-n, --dry-run
尝试运行,不做实际的改变

-e
指定远程通讯使用的shell,默认是ssh

实践

1 本地同步lua-5.3.4目录下所有.c,.h扩展名的文件到本地目录lua-test

[root@vm ~]# rsync -avz --include=*/ --include=*.c --include=*.h --exclude=* lua-5.3.4/ lua-test

2 本地同步lua-5.3.4目录下的所有目录(不包含文件)到本地目录lua-test

[root@vm ~]# rsync -avz --include=*/ --exclude=* lua-5.3.4/ lua-test

3 本地目录lua-5.3.4同步到远程主机wadeyu家目录

rsync -avz -e 'ssh -p 22' lua-5.3.4 wadeyu@192.168.2.8:~

4 远程同步到本地

rsync -avz -e 'ssh -p 22' wadeyu@192.168.2.8:~/lua-5.3.4/ ./lua-5.3.4-test

参考资料

【1】man rsync
【2】rsync 精确同步文件用法
https://blog.csdn.net/knight_zhen/article/details/47109077

posted @ 2018-04-03 19:26  huan&ping  阅读(193)  评论(0编辑  收藏  举报