喵♂呜 的博客

一个刚毕业就当爹的程序猿 正在迷雾中寻找道路...

rsync使用简介

核心命令: rsync -r 源目录/ 用户名@远程地址:远程目录


命令帮助

1
2
3
4
5
6
7
8
9
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.

Tip: 当目录中包含:号时 使用2个::作为地址和目录的分割符 不然只能用一个

参数详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
 -v, --verbose               详细模式输出
-q, --quiet 精简输出模式
--no-motd suppress daemon-mode MOTD (see manpage caveat)
-c, --checksum 打开校验开关,强制对文件传输进行校验
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性 等于 -rlptgoD (no -H,-A,-X)
--no-OPTION turn off an implied OPTION (e.g. --no-D)
-r, --recursive 对子目录以递归模式处理
-R, --relative 使用相对路径信息
--no-implied-dirs don't send implied dirs with --relative
-b, --backup 创建备份 存在同名时 自动重命名 (详见参数 --suffix & --backup-dir)
--backup-dir=DIR 设置备份文件的保存路径
--suffix=SUFFIX 设置备份文件的后缀 (default ~ w/o --backup-dir)
-u, --update 进行更新操作 只同步远程比本地老的版本文件(根据时间)
--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 保留 软链接
-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
-k, --copy-dirlinks transform symlink to a dir into referent dir
-K, --keep-dirlinks treat symlinked dir on receiver as dir
-H, --hard-links 保留 硬连接
-p, --perms 保留 权限
-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 保留 所有者 (super-user only)
-g, --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 保留 文件修改时间
-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 (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 只同步已存在的文件
--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-before receiver deletes before transfer, not during
--delete-during receiver deletes during transfer (default)
--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-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 限制文件最大值
--min-size=SIZE 限制文件最小值
--partial 断点续传
--partial-dir=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
--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
--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 指定链接端口
--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 在传输时现实传输过程
-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 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
-4, --ipv4 prefer IPv4
-6, --ipv6 prefer IPv6
--version print version number
(-h) --help show this help (-h works with no other options)


如何使用rsync进行同步

  • 跨服务器备份需要服务器账户密码(推荐使用公钥登录)
  • 配置SSH登录公钥(这里直接采用命令处理)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# ssh-keygen //生成公钥
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
38:3c:57:d5:fa:9f:77:06:2d:1a:2f:d5:b7:55:ac:fd root@iZ28cqmea34Z
The key's randomart image is:
+--[ RSA 2048]----+
| .. |
| . . |
| . . . |
| . . . . o|
| = S . =.|
| + . * *|
| = +*|
| o .oE|
| . .o|
+-----------------+

# ssh-copy-id -i ~/.ssh/id_rsa.pub 用户名@远程主机 //复制公钥到目标主机
用户名@远程主机's password: //输入密码
Now try logging into the machine, with "ssh '用户名@远程主机'", and check in:

.ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

# rsync -r 源目录/ 用户名@远程地址:远程目录 //同步命令

通过crontab设置自动同步

1
2
3
4
5
6
7
8
# crontab -e //进入VIM设置

添加任务计划(具体配置请百度)
* * * * * cd 源目录 && rsync -r ../源目录/ 用户名@远程地址:远程目录 //每分钟同步一次

保存配置

service crond restart //重启任务计划

Win下使用rsync

使用MinGW

  • 下载 MinGW 然后安装 rsync 或者下载下面的
  • 下载已经安装好rsync的 MinGW下载
  • 打开 解压目录\MinGW\msys\1.0\bin\bash.exe
  • 然后按照上述方案执行

使用Cygwin

  • 下载 Cygwin 然后安装 rsync
  • 添加 crontab 到Win服务 (具体请百度)
  • 然后按照上述方案执行

欢迎关注我的其它发布渠道