对于数据备份,我一向比较小心,一般会定时进行相关备份,但即便如此,也吃过亏,主要是一些存放于虚拟机里的资料,由于没有及时备份,有一次虚拟机故障导致文件丢失损失惨重,究其原因,主要是文件太多,完全备份太麻烦,而手工的增量备份,肯定会存在漏网之鱼
基于此,前段时间刚好不太忙,花了将近一天时间,开发了一个针对文件系统的自动增量备份脚本
该脚本的主要特点是:
1. 有不错的效率。我测试了自己的电脑上的某个目录,该目录总共53G的文件(文件数量27万多个,文件夹数量1万7千多个),增量更新查询用时3分钟,这里只提供查询的时间(不备份),因为备份文件的话,由于无法评估待更新的文件数量,所以没办法做一个比较
2. 可以设置不备份的路径,通过指定IgnorePath.txt的内容即可
3. 完善的日志提示
脚本代码如下
# -*- coding:utf-8 -*-
"""
@作者: Jaymi
@日期: 20190906
@其他说明: 因为使用了日志打印输出有使用中文,某些(linux)系统的sys.stdout.encoding是不支持中文的
查询指令 import sys print(sys.stdout.encoding)
此时运行脚本在标准输出的打印可能是乱码,这种情况用下下面的方法运行脚本即可
PYTHONIOENCODING=gbk python3 backup_fb.py
"""
import os
import datetime
import sys
import logging
import shutil
# 源路径 -- 该目录的文件应是更新/更全的
path_a = '/lib'
# 目的路径 -- 用于备份源目录,该目录的文件应该较旧和不全的
path_b = '/home/lib_1'
# 开始的时间
now_begin = datetime.datetime.now()
# 忽略不处理的路径
ignorepath = []
# 需要递归处理的目录
recursion_path = []
recursion_path.append(path_b)
# 编码错误的文件列表
unicode_error = []
# 编码错误的文件列表
permission_error = []
# 其他错误的文件列表
other_error = []
# 待复制的文件/文件夹数量
newfile_count = 0