rsync 手册没看太明白。
google上中文都是csdn内容,csdn内容抄袭太恶心了,还要点展开全部。没找到真正有用的文件列表同步方法说明。
我的需求:
把一个vps的所有路径(也就是/)下我的各种配置文件软件都备份到OneDrive。
同时偶尔sync到其他vps上面。
有些文件不要同步。
需求看似简单,越简单的需求实现越复杂啊!
如下是我要传输的文件列表。
# 禁止传输琐碎文件
# - *.log
# 需要传输的文件夹,文件
## root相关
+ /root/
+ /root/.vimrc
+ /root/.bash*
+ /root/.profile
+ /root/.tmux.conf
+ /root/.selected_editor
+ /root/*.py
+ /root/*.c
+ /root/note
+ /root/.config/
+ /root/.ssh/
- /root/.ssh/known_hosts*
+ /root/.vim*/
+ /root/.vim*/
+ /root/sbin/
+ /root/.aria2/
+ /root/.jupyter/
+ /root/jupyterNotebook/
+ /root/work/
- /root/*
## tao相关
+ /home/
+ /home/tao/
+ /home/tao/.bash*
+ /home/tao/.profile
+ /home/tao/.tmux.conf
+ /home/tao/.selected_editor
+ /home/tao/*.py
+ /home/tao/*.c
+ /home/tao/note
+ /home/tao/.jupyter/
+ /home/tao/jupyterNotebook/
+ /home/tao/.ssh/
- /home/**
## 其他
+ /opt/
# + /opt/anaconda2/
- /opt/*
+ /opt/ut/
+ /etc/
+ /etc/ssh/
+ /etc/ssh/sshd_config
- /etc/*
################################
# 禁止传输其他
- /*
# rsync -avzh -P --delete --include-from='list_b' / /o
rsync -avz -P --include-from='/root/.config/rsync/list' --log-file=/var/log/rsync.log / /o > /dev/null 2>&1
方案一: –files-from=
这种方案可以用绝对路径,没有复杂的匹配,但不支持正则匹配。要一条一条写。
方案二:–filter
filter 默认不支持from 文件,要再加管道,麻烦。
优点是一个文件可以+可以-。省事。
方案三:–include –exclude
默认写法是相对路径。
我目前改进方案:–include+filter
include也支持方案二的filter语法。
但最让人痛苦迷惑点是:文件路径的写法:
比如上上面代码中我要备份/root/.ssh/下所有文件,但不备份/root/.ssh/known_hosts*。若我的备份的source是’/’的话,我要这样写才可以。
也就是文件夹要一直include到对应文件中。
用一般的–include –exclude语法也是要考虑这点。
## root相关
+ /root/
+ /root/.ssh/
- /root/.ssh/known_hosts*
- /root/*
- /*
最后用如下code sycn,加到crontab即可。
rsync -avz -P --include-from='/root/.config/rsync/list' --log-file=/var/log/rsync.log / /o > /dev/null 2>&1
最后抄一份rsync 常见命令介绍:
-v 可视化,显示同步过程
-r 递归
-z 启用压缩
-a 保留了所有人和所属组、时间戳、软链接、权限,并以递归模式运行
-d 仅传输文件而非递归
-v, –verbose 增强可读性
-q, –quiet 忽略非错误信息
–no-motd 忽略daemon模式的MOTD信息 (see manpage caveat)
-c, –checksum 基于checksum校验,而非mod-time和size
-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 制定备份的后最 (default ~ w/o –backup-dir)
-u, –update 跳过接受端较新的文件
–inplace 直接在文件上更新(SEE MAN PAGE)
–append 直接追加文件
–append-verify 和–append很像, 只是用文件的较旧的那部份做checksum
-d, –dirs 仅传输文件而非递归
-l, –links 将软链接当作软链接来拷贝
-L, –copy-links 拷贝链接对应的文件或者目录而非链接本身
–copy-unsafe-links 仅不安全的链接才被拷贝
–safe-links 忽略那些链接到目录树外的链接
-k, –copy-dirlinks 将链接翻译成其链接的目录
-K, –keep-dirlinks 将目录链接在接收端转换成目录
-H, –hard-links 保留硬链接
-p, –perms 保留权限
-E, –executability 保留文件的可执行性
–chmod=CHMOD 改变文件或者目录的权限
-A, –acls 保留ACLs (implies –perms)
-X, –xattrs 保留扩展属性
-o, –owner 保留所有者(super-user only)
-g, –group 保留组
–devices 保留设备文件 (super-user only)
–specials 保留特殊文件
-D 和 –devices –specials一样
-t, –times 保留修改时间
-O, –omit-dir-times 在–times选项里忽略目录的时间
–super 允许接受方执行那个一些超级用户的活动
–fake-super 通过xattrs来存储和回复权限
-S, –sparse 高效处理稀疏文件
-n, –dry-run 只运行,不做改变
-W, –whole-file 拷贝整个文件(without delta-xfer algorithm)
-x, –one-file-system 不跨越文件系统
-B, –block-size=SIZE 强制指定checksum的块大小
-e, –rsh=COMMAND 指定要使用的远程shell
–rsync-path=PROGRAM 指定远程要运行的rsync路径
–existing 如果接收端不存在文件就不创建
–ignore-existing 如果接收端存在就不更新文件
–remove-source-files 发送端删除已经同步的文件 (non-dirs)
–del an alias for –delete-during
–delete 删除接收端上在发送端不存在的文件
–delete-before 接收端在发送前删除,而不是发送过程中
–delete-during 接收端在发送过程中删除
–delete-delay 在发送过程中寻找文件,在发送完成后删除
–delete-after 接收端在发送完成后删除
–delete-excluded 在接收端删除排除的文件
–ignore-errors 即使有I/O错误也删除
–force 即使目录不是空的也删除
–max-delete=NUM 最多删除文件的数目
–max-size=SIZE 最大传输文件的大小
–min-size=SIZE 最小传输文件的大小
–partial 保持部分传输的文件
–partial-dir=DIR 制定部分传输文件的存放目录
–delay-updates 先传输,最后再更新,保持原子性
-m, –prune-empty-dirs 接收端删除空目录
–numeric-ids 接收端不要将uid/gid映射为用户名和组名
–timeout=SECONDS 设置I/O超时时间,s为单位
–contimeout=SECONDS 设置链接服务端的时间
-I, –ignore-times 即使mtime和size都相同也不跳过
–size-only 只要大小相同就跳过
–modify-window=NUM 比对时间时制定精确范围,范围内都认为时间相同
-T, –temp-dir=DIR 指定创建临时文件的目录
-y, –fuzzy 文件在接收端不存在的情况下,在当前目录下寻找一个基础文件,以加快传输
–compare-dest=DIR 接收端除了和发送端对比还和这里指定的目录对比,适合备份上次备份改变的文件
–copy-dest=DIR 和–compare-dest类似,只是接收端会用本地拷贝来复制那些未改变的文件
–link-dest=DIR 和–compare-dest类似,只是接收端会建立那些未改变文件的硬链接
-z, –compress 传输过程中压缩
–compress-level=NUM 指定压缩等级
–skip-compress=LIST 不压缩指定后缀的文件
-C, –cvs-exclude 以CSV的方式自动忽略文件
-f, –filter=RULE 新增一个file-filtering规则
-F same as –filter=’dir-merge /.rsync-filter’ repeated: –filter=’- .rsync-filter’
–exclude=PATTERN 排除规则PATTERN
–exclude-from=FILE 从文件中读取排除规则
–include=PATTERN 不要排除指定规则的文件
–include-from=FILE 从文件中读取包含的规则
–files-from=FILE 从文件中读取文件列表
-0, –from0 all
-from/filter files are delimited by 0s
-s, –protect-args 参数不许要空格分割; only wildcard special-chars
–address=ADDRESS 绑定监听的地址
–port=PORT 制定端口号
–sockopts=OPTIONS 制定TCP选项
–blocking-io 在远程shell中使用blocking I/O
–stats 给出文件统计信息
-8, –8-bit-output 输出时不对高位字符转义
-h, –human-readable 以易于阅读的方式打印数字
–progress 显示传输进度
-P same as –partial –progress
-i, –itemize-changes 打印更新的总结信息
–out-format=FORMAT 以特定的格式打印更新信息
–log-file=FILE 日志文件
–log-file-format=FMT 日志文件格式
–password-file=FILE 密码文件
–list-only 仅列出文件
–bwlimit=KBPS 限制带宽; KBytes per second
–write-batch=FILE 将批量更新写入文件
–only-write-batch=FILE 和 –write-batch类似 but w/o updating destination
–read-batch=FILE 从文件中读取批量更新任务
–protocol=NUM 使用旧版本的协议
–iconv=CONVERT_SPEC 要求文件名字符转义
-4, –ipv4 prefer IPv4
-6, –ipv6 prefer IPv6
–version 打印帮助信息
(-h) –help 打印这个帮组信息 (-h 仅在单独使用时与 –help 同意)
---------------------
后期若要做监控文件改变运行的话可以考虑lsyncd
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容