php python 数据同步,rsync 增量同步

[TOC]

> [参考](http://www.ruanyifeng.com/blog/2020/08/rsync.html)

## 概述

1.会检查发送方和接收方已有的文件,仅传输有变动的部分(默认规则是文件大小或修改时间有变动)

2. 替代`cp`和`mv`命令

## 安装

> 注意,传输的双方都必须安装 rsync。

## 基本用法

### -r 递归同步文件

```

rsync -r source destination

rsync -r source1 source2 destination

```

### -a [常用]递归同步文件并同步元信息

`-a`参数可以替代`-r`,除了可以递归同步以外,还可以同步元信息(比如修改时间、权限等)

```

$ rsync -a source destination

```

把 source 同步到 destination/source

```

$ rsync -a source/ destination

```

把 source 同步到 destination

### -n 模拟执行结果

```

$ rsync -anv source/ destination

-n参数模拟命令执行的结果

-v参数则是将结果输出到终端

```

### --delete 删除源中不存在的文件

`--delete`参数会使得`destination`成为`source`的一个镜像

```

$ rsync -av --delete source/ destination

```

### --exclude 排除

#### 排除文件

```

$ rsync -av --exclude='*.txt' source/ destination

# 或者

$ rsync -av --exclude '*.txt' source/ destination

```

> 注意,rsync 会同步以"点"开头的隐藏文件,如果要排除隐藏文件,可以这样写`--exclude=".*"`

#### 排除目录

排除某个目录里面的所有文件,但不排除目录本身:

```

$ rsync -av --exclude 'dir1/*' source/ destination

```

#### 多个排除模式

```

$ rsync -av --exclude 'file1.txt' --exclude 'dir1/*' source/ destination

```

#### 用文件指定排除

```

$ rsync -av --exclude-from='exclude-file.txt' source/ destination

```

每个模式一行

### 远程同步

#### 本地到远程

```

$ rsync -av source/ username@remote_host:destination

```

#### 远程到本地

```

$ rsync -av username@remote_host:source/ destination

```

> 指定ssh端口 `$ rsync -av -e 'ssh -p 2234' source/ user@remote_host:/destination`

### 基准备份

```

rsync -a --delete --link-dest /compare/path /source/path /target/path

--link-dest参数指定基准目录/compare/path

```

那些没变动的文件则会生成硬链接

#### 实例:备份用户的主目录

home_back.bash

```

#!/bin/bash

# A script to perform incremental backups using rsync

set -o errexit

set -o nounset

set -o pipefail

readonly SOURCE_DIR="${HOME}"

readonly BACKUP_DIR="/mnt/data/backups"

readonly DATETIME="$(date '+%Y-%m-%d_%H:%M:%S')"

readonly BACKUP_PATH="${BACKUP_DIR}/${DATETIME}"

readonly LATEST_LINK="${BACKUP_DIR}/latest"

mkdir -p "${BACKUP_DIR}"

rsync -av --delete \

"${SOURCE_DIR}/" \

--link-dest "${LATEST_LINK}" \

--exclude=".cache" \

"${BACKUP_PATH}"

rm -rf "${LATEST_LINK}"

ln -s "${BACKUP_PATH}" "${LATEST_LINK}"

```

> 上一次备份的目录${BACKUP_DIR}/${DATETIME}是基准目录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值