使用rsync备份与同步文件
在数字化时代的今天,随着个人拥有的数据量急剧增加,对其中的重要数据进行备份以保证其安全性、正确性变得越来越重要。同时,由于在公司、实验室、家里、外出等不同环境下往往使用不同的电脑设备(如台式机、笔记本)与存储介质(如移动硬盘、U盘),在多台电脑以及存储介质之间保持数据的同步和一致也成为越来越频繁且麻烦的操作,以至于靠人工辩别与手动操作变得不再可能。因此,能够有一款工具软件能够自动、高效、稳定地完成上述数据备份和同步操作就变得极其必要。以往,我曾使用过Total Commander自带的同步功能以及微软推出的小工具SyncToy,虽然图形化的操作很容易上手,但是性能差强人意。当数据量达到1TB以上时,就会出现程序卡死的情况。因此,它们无法满足我目前的需求。而GNU/Linux下著名的rsync
命令以其高性能、可靠性、灵活性,则完全可以胜任这样的工作,而且即使数据量再大也毫无问题。在同步的过程中,rsync
通过比较文件内容,仅传输差异部分,因而速度很快。同时,rsync
在传输文件时始终都做md5校验,所以非常可靠安全,使用者不用担心文件内容出错的问题。再者,rsync
既可以通过不同的外设接口将数据同步至连接到本机的移动存储设备上,也可以经由网络以SSH的方式与其他电脑进行数据交换,因而同步方式非常灵活。接下来,本文对rsync
的常用命令行参数与过滤器予以简要介绍。更细节的问题则可以参考使用手册。
常用命令行参数
- -r, --recursive: 递归同步目录。
- -t, --times: 保留文件修改时间。
- -l, --links: 拷贝符号链接。默认情况下,rsync对符号链接不作任何处理。要想拷贝它们,就需要此选项。同时,由于被同步的整个文件树在不同电脑上所在的绝对路径会有不同,所以建议基于相对路径创建软符号链接。这样一来,只要保证目录树本身的结构不变,软符号链接在不同的电脑上均有效。
- -v, --verbose: 在执行备份、同步的过程中显示详细信息。
- -z, --compress: 传输文件的过程中压缩数据。当通过网络在两台电脑间直接同步数据时,最好将该选项加上。
- -u, --update: 跳过在目的端较新的文件。这样一来,该文件就不会被来源端的同名文件覆盖。或者当来源端没有该文件时,该文件亦不会被删除。这对于在两台或者多台电脑上分别创建了一些新文件然后需要将其统一合并的情况非常有用。
- --delete: 删除存在于目的端但不在来源端的文件。该选项可与-u, --update一起使用。
- -i, --itemize-change: 输出文件改动汇总报告。
- --exclude: 定义一条文件排除规则。命令行上可以出现多个该选项。
- --exclude-from=FILE:指定从配置文件FILE读取排除规则。
- --include: 定义一条文件包含规则。命令行上可以出现多个该选项。
- --include-from=FILE:指定从配置文件FILE读取包含规则。
- -n, --dry-run: 只输出将要进行的具体的同步操作而不实际执行。
过滤器
可以在配置文件中或者直接在命令行上定义一组文件名匹配过滤规则,用于包含和排除需要同步的文件。对于每一个待同步的文件,第一个被匹配的规则生效。如果没有遇到任何匹配,则该文件被默认包含在同步操作中。
过滤器规则格式
RULE [PATTERN_OR_FILENAME]
RULE,MODIFIERS [PATTERN_OR_FILENAME]
过滤器规则前缀
exclude, - specifies an exclude pattern.
include, + specifies an include pattern.
merge, . specifies a merge-file to read for more rules.
dir-merge, : specifies a per-directory merge-file.
hide, H specifies a pattern for hiding files from the transfer.
show, S files that match the pattern are not hidden.
protect, P specifies a pattern for protecting files from deletion.
risk, R files that match the pattern are not protected.
clear, ! clears the current include/exclude list (takes no arg)
在配置文件中指定过滤器
- 空白行被忽略。
#
用于注释行。- 每一行为一条规则。
之后在rsync命令行上使用--exclude-from或--include-from选项,加载配置文件。
在命令行指定过滤器
- 每一个
--include
或--exclude
选项只能定义一条规则,但是可以定义多个。 - 只支持include、exclude和clear三种规则。
模式匹配
模式不包含任何前缀:可以匹配被遍历文件树的任何位置。
模式以
/
开头:从待传输文件树的根目录开始匹配。模式以
/
结尾:仅匹配文件夹,而不匹配普通文件、符号链接或设备文件。模式可以包含
*
、?
、[
通配符。*
可以匹配除了/
之外的任何路径名。**
可以匹配任何路径名,包括/
。?
可以匹配除了/
之外的任何单个字符。[
用于定义字符集,如[a-z]
。
修饰符
/
: 用于指定使用操作系统绝对路径匹配。!
: 当模式不匹配时规则生效,即对原规则逻辑取反。
注意与说明
如果父文件夹未被包括在同步文件列表内的话,其所包含的文件与子文件夹也不会被同步。
当模式字符串中用到了通配符时,若需要写出某个通配符所代表的原字符,便需要使用反斜线转义。如果在模式字符串中只用到通配符的原义字符,则无需反斜线转义。
使用rsync备份与同步文件的更多相关文章
- linux设置rsync+inotify实时同步文件
linux设置rsync+inotify实时同步文件 应用场景: 同步接收方:test01 接收目录:/opt/software/test/a/ 同步发起方:test02 同步目录:/opt/so ...
- 通过在shell脚本中用scp或rsync实现远程同步文件
通过在shell脚本中用expect实现远程scp文件 shell expect的简单用法 http://myunix.blog.51cto.com/191254/1095074 http://ji ...
- centos7中使用Rsync和inotify同步文件
一. 环境说明 由于web服务器所提供的网站数据需要保持一致,但当服务器越来越多时,这些主机之间同步网站数据会很麻烦. 解决方案是在后端建立一个数据发布服务器,该服务器作为rsync客户端,通过ino ...
- rsync实现文件备份同步(比如服务器镜像)
[rsync实现网站的备份,文件的同步,不同系统的文件的同步,如果是windows的话,需要windows版本cwrsync] 一.什么是rsync rsync,remote synchronize顾 ...
- Rsync备份服务部署
1 Rsync服务器架构规划 在搭建服务之前需要做以下规划设计,其中包括:主机规划表.主机IP地址规划表.主机架构图.主机hosts解析以及linux主机基础优化等 1.1 主机规划表 服务器说明 数 ...
- 利用rsync备份生产应用(一)
rsync简单介绍 Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.Rsync使用所谓的"Rsync算法"来 ...
- 用rsync命令删除大文件夹
删除大文件夹 rsync 命令做同步文件用的命令 我们可以借助其快速的运行 来对大文件夹删除:原来就是 新建一个空文件夹 然后把这个空文件夹同步到一个大文件夹下面: 这样会删除大文件夹下面的内容 是高 ...
- rsync服务架设(数据同步|文件增量备份)
近期由于业务需要,需要将两台服务器数据保持同步.方案有很多,rsync是其中一种解决方案,本文对rsync的安装及配置进行简单说明,其他实现方式有兴趣可以研究.以下是本文提纲,供参考: rsy ...
- Rsync + Lsyncd服务实现文件实时同步/备份
1.接受端安装rsync yum -y install rsync 2.配置同步模块 vim /etc/rsyncd.conf # any name you like [backup] # desti ...
随机推荐
- Docke--Dockerfile指令介绍
Dockerfile 构建镜像常用指令 Dockerfile 是一个文本文件,其内包含了一条条的指定(Instruction),每一条指令构建一层,因此每一条指定的内容,就是描述该层应当如何构建. 通 ...
- Java 8 特性 —— 默认方法和静态方法
Java 8 新增了接口的默认方法.简单说,默认方法就是接口可以有实现方法,而且不需要实现类去实现其方法.我们只需在方法名前面加个 default 关键字即可实现默认方法. 为什么要有这个特性?之前的 ...
- Flexbox(弹性盒模型)完全指南
Flexbox(弹性盒模型)布局完全指南 Github:sueRimn 来源:A guide to Flexbox 这个指南讲诉了flexbox的所有内容,重点介绍了父元素(flex容器)和子元素(f ...
- python图形用户
1)使用GUI 1.GUI:Graphical user interface 2.tkinter:GUI libary for Python自带的库 3.GUI:Example 2)Ubuntu18. ...
- golang中使用mysql数据库
安装 安装mysql驱动 go get github.com/go-sql-driver/mysql 安装sqlx驱动 go get github.com/jmoiron/sqlx 一.插入数据库 p ...
- iOS程序员 如何做到升职加薪,5年 开发经验 码农 笔记送给你!
前言: 对于我们绝大多数人来说,工作最基本的意义是我们可以通过自己的劳动换取酬劳来养活自己,尤其是对于刚毕业的学生,拥有一份全日制的工作意味着自己走出校园,踏上社会,自己真正开始独立起来. 在养活自己 ...
- 大数据-hadoop生态之-HDFS
一.HDFS初识 hdfs的概念: HDFS,它是一个文件系统,用于存储文件,通过目录树定位文件,其次,他是分布式的,由很多服务器联合起来 实现功能,集群中的服务器各有各自的角色 HDFS设计适合一次 ...
- mac-redis安装与使用
安装: brew install redis --------------- 使用: 启动redis-server: sudo redis-server 连接:./redis-cli -h 127.0 ...
- Eclipse - 安装lombok后注解无效
安装 lombok lombok 的安装过程挺简单的,网上已经有很多相关的博客,这里就不在多说了,可以参考这篇:eclipse集成lombok注解不起作用 但是我按照网上的方式安装之后,注解一直不起作 ...
- python基础学习小结
Python是一门面向对象的解释性语言(脚本语言),这一类语言的特点就是不用编译,程序在运行的过程中,由对应的解释器向CPU进行翻译,个人理解就是一边编译一边执行.而JAVA这一类语言是需要预先编译的 ...