linux文件对比备份,Linux 文件差异备份方案

题记

对于我这种大水比来说。。

能够搞出来已经很不错了。。虐心。。其实只是那么基础的东西。。

背景是这样的,我有服务器,有一个很多网站的 www 文件夹。

一直以来,我每天都会进行备份。备份的方式是,整个文件夹拷出来。

可是节约成本的我们很快就发现 15GB 的硬盘对于每天 300M 所有的备份,实在是吃不消,硬盘老是需要手工清理。

那么回想一下,其实完全无需每天重复备份那些重复的文件,应该采取差异备份方案,也就是说,月初做一次全量备份,然后每天备份那些改动时间戳在月初之后的文件。

这样要恢复任何一天的备份,只需要手持月初的全量备份,然后将差异备份覆盖进去,就可以得到当天的备份。

换句话说,绝大多数的情况下,差异备份应当是很少内容的。

那么问题来了,怎么整呢?

那当然是 bash 脚本了,中间虐心的菜鸟探索心路历程就省去了,直接上结果,虽然写出来的脚本是那么的很粗糙很繁琐很不专业,但是,能够搞出来已经很不错了。

一个能够将差异文件连路径复制到目标文件夹的函数

cp_month_diff() {

# 第一个参数是源目录,请加上 / 结尾

origin=$1

# 第二个参数是目标目录,请加上 / 结尾

target=$2

# 获取当月第一天的参考时间点

dt0=$(date +%Y%m01)

# 提防下一步的搜索中可能会遇到的包含空格的文件名,需要修改分隔符

# 参见:

IFS=$'\n'

# 用 find -newermt 来列出变动过的文件(目录就省了),放到数组 files 里

files=$(find $origin -type f -newermt $dt0)

# 遍历 files 数组

for file in $files

do

# 将原始文件名里面开头的原路径用正则删掉,接上目标路径,就是目标的文件路径

newfile=${target}${file/#$origin/}

# 计算目标路径的目录

dir=$(dirname $newfile)

# 连锁创建这个目录(因为目录不存在的话 cp 不进去)

mkdir -p $dir

# 将源文件复制到新路径

cp $file $newfile

done

}

然后,调用的话大概是这个样子:

cd /var/backups/backup_20150619

cp_month_diff /var/www/ ./

上面脚本的关键在于如下几点:

用 find -newermt 列出所有的当月改动过的文件;

将上一步的结果完全按照字符串一个一个处理;

计算出目标的目录,并且创建目录再往里面拷;

对于高手来说,上述流程简直是又长又臭,但对于本菜鸟来说,起码能行。

【转载请附】愿以此功德,回向 >&gt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值