首页 技术 正文
技术 2022年11月8日
0 收藏 918 点赞 1,219 浏览 1819 个字

由于备份的需要,需要经常备份一些重要的文件,但是又不能逐个比较,所以就度了一下,找到了这篇博文,在此表示感谢,下面是python3版的写法,其中有一些改变,重要的改变之处作出了简要注释,完整注释请参考原文,

重要:下面代码未经充分测试,在备份自己文件之前,请充分测试,如有疏漏之处,欢迎留言,一起学习

注意:注意路径的分割斜杠,在这里是斜杠/而非反斜杠\

md5校验选择备份

 # -*- coding: utf-8 -*- import hashlib
import os
import shutil def md5check(fname):
m = hashlib.md5()
with open(fname, 'rb') as f: # 这里文件的打开方式与原文不同,由于在备份我的文件时出现了编码问题,所以进行了修改,以二进制方式打开
while True:
data = f.read(4096)
if not data:
break
m.update(data)
return m.hexdigest() # 文件复制函数
def copy(path):
new_path = path
new_path = new_path.replace(old_source, new_source)
print(new_path)
if os.path.isfile(new_path):
old_md5 = md5check(path)
new_md5 = md5check(new_path)
if old_md5 != new_md5:
shutil.copy(path, new_path)
else:
dirname = os.path.dirname(new_path)
if os.path.exists(dirname): # 如果目录存在,直接复制文件到new_path
shutil.copy(path, new_path)
else: # 如果目录不存在,则直接创建目录并复制文件
try:
os.makedirs(dirname)
shutil.copy(path, new_path)
except WindowsError:
print('创建目录出错') # 查找所有目录文件的递归函数
def lsdir(folders):
path = os.listdir(folders)
for line in path:
line = folders + '/' + line
if(os.path.isdir(line)):
lsdir(line)
else:
copy(line) if __name__ == '__main__':
global old_source
global new_source
print('例子:d:/directory,请输入要备份的目录所在地址、以及目标地址:')
old_source = 'C:/Users/xxxx/AppData/Local/Google/Chrome/User Data/Default/Local Storage/leveldb'
new_source = 'D:/leveldb' # 此处不知道只传入盘符会发生什么,建议不要这么做,未经测试
lsdir(old_source)

完全备份

# -*- coding: utf-8 -*-
# 脚本功能:删除new_path目录,然后复制original_path到new_path目录,注意两目录的名称要一样,初衷:用于名称变化的需要备份的文件
# 基于python3import os
import shutil# 不校验直接删除已备份文件,再重新备份源文件
def non_checkout_backup(original_path, new_path):
if os.path.exists(new_path):
shutil.rmtree(new_path) # shutil.rmtree空目录、有内容的目录都可以删,但是必须要存在,否则报错, 而os.rmdir只能删除空目录
shutil.copytree(original_path, new_path) # original_path、new_path都只能是目录if __name__ == '__main__':
original_path = 'C:/Users/xxxx/AppData/Local/Google/Chrome/User Data/Default/Local Storage/leveldb'
new_path = 'D:/leveldb'
non_checkout_backup(original_path, new_path)
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,089
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,566
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,415
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,187
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,823
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,906