烦恼一般都是想太多了。

0%

rsync进行数据同步

rsync是一个快速,灵活的可用来替代rcp的工具,但是其有更多的选项和使用 rsync 远程更新协议来提高已更新文件的传输速度。

rsync远程更新协议允许rsync只传输文件中的不同,使用一种校验和搜索算法。

特性

  • 支持复制链接,设备,所有者,组及权限
  • 类似GNU tar 的排除选项
  • 类似 CVS 的排除模式
  • 可以使用透明的远程shell,包括 ssh/rsh
  • 不需要特权
  • 文件传输管道最小化了开销
  • 支持匿名或授权的rsync守护进程

一般说明

Rsync从远程主机复制文件或复制文件到远程主机,或只是在本地主机上复制文件(不支持在两个远程主机间复制文件)。

有两种不同的方式来远程主机:使用远程-shell来作为传输(ssh,rsh),或者通过 TCP来联系rsync服务。当源或目标主机标识的路径包含一个 : 的时候会使用远程shell。当源或目标主机后的路径包含两个 :: 的时候就会直接与远程的rsync服务通信,或者 rsync:// 链接被指定也是一样(查看通过远程-shell连接使用 rsync-服务特性来查看例外)。

作为一个特殊情况,如果单独一个源参数,没有目标参数,那么会输出一个列表,类似ls -l

如果源或目标都没有指定一个远程主机的话,那只是在本地进行复制。

设置

查看 README 了解安装指令。

安装后,你可以有rsync联系任何可以通过远程shell访问的机器(包括 rsync 服务模式协议的机器)。对于远程传输,现代的rsync使用 ssh 来进行通信,默认情况下可能已经配置成了不同的shell,如 rsh/remsh。

可以指定我们自己喜欢的远程shell,使用 -e 命令行选项, 或设置 RSYNC_RSH 环境变量。

rsync 必须在源或目标机器上都安装。

使用

可以以类似 rcp 的方式使用 rsync,必须指定源和目标,其中一个可能会是远程主机。

也许最好的方式是以实际的例子进行展示:

rsync -t *.c foo:src/

这将会传输任何匹配 *.c 格式的文件到机器foo上的 src 目录内。如果foo机器上有些文件已经存在,那么rsync会使用远程更新协议来发送不同的部分。

rsync -avz foo:src/bar /data/tmp

这会递归将远程foo机器上,src/bar 目录 传输到 /data/tmp/bar。文件以archive模式传输,这能确保 符号链接,设备文件,属性,权限,所有信息都被完整传输。同时,使用压缩可以减少传输的数据量。

rsync -avz foo:src/bar/ /data/tmp

源后拖尾的 / 改变了行为,将不会在目标上建立一个目录。

使用

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
-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; same as -rlptgoD (no -H)
--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
-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
-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
--executability preserve the file's executability
--chmod=CHMOD affect file and/or directory permissions
-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 times
-O, --omit-dir-times omit directories when preserving times
--super receiver attempts super-user activities
-S, --sparse handle sparse files efficiently
-n, --dry-run show what would have been transferred
-W, --whole-file copy files whole (without rsync 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 (default)
--delete-during receiver deletes during transfer, not before
--delete-after receiver deletes after transfer, not before
--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 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
--timeout=TIME set I/O 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
-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
--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 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
-E, --extended-attributes copy extended attributes
--cache disable fcntl(F_NOCACHE)
-4, --ipv4 prefer IPv4
-6, --ipv6 prefer IPv6
--version print version number
(-h) --help show this help (-h works with no other options)