吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2874|回复: 14
收起左侧

[Python 转载] python 增量备份

  [复制链接]
salge 发表于 2021-9-8 09:15
参数1是源目录(要备份的目录),参数2是目标目录(备份保存到的目录)
[Python] 纯文本查看 复制代码
import hashlib
def md5(file_path):
#------判断文件的MD5-------↓
    if os.path.isdir(file_path):
        return '1'
    read_file=open(file_path,mode='r',errors='ignore')

    the_hash=hashlib.md5()
    for line in read_file.readlines():
        the_hash.update(line.encode('utf8'))
    read_file.close()
    return the_hash.hexdigest()


import os
import shutil
def directory(dir_name1,dir_name2):
#-------克隆目录1结构到目录2--------↓
    dir1_list=[]
    for path,dirs,files in os.walk(dir_name1):
        # print(path,dirs,files)
        dir1_list.append(path)
    a=len(dir1_list[0])
    for i in range(len(dir1_list)):
        if os.path.exists(dir_name2+dir1_list[i][a:]) is False:
            os.mkdir(dir_name2+dir1_list[i][a:])
    dir2_list=[]
    for path,dirs,files in os.walk(dir_name2):
        dir2_list.append(path)
    a=len(dir2_list[0])
    for i in range(len(dir2_list)):
        if os.path.exists(dir_name1+dir2_list[i][a:]) is False:
            os.rmdir(dir2_list[i]) 
#-------判断目录1哪些文件变更,复制到目录2--------↓
    dir1_root=None
    for path,dirs,files in os.walk(dir_name1):
        if dir1_root is None:
            dir1_root=path
        trimmed_path=path[len(dir1_root):]
        # print(trimmed_path,files)
        if files!=[]:
            for i in range(len(files)):
                file1=os.path.join(dir_name1+trimmed_path+os.path.sep,files[i])
                file2=os.path.join(dir_name2+trimmed_path+os.path.sep,files[i])
                if os.path.exists(file2) is True:
                    if md5(file1) != md5(file2):
                        shutil.copy(file1,file2)
                else:
                    shutil.copy(file1,file2)                    
#-------删除目录2比目录1多出来的文件--------↓
    dir2_root=None
    for path,dirs,files in os.walk(dir_name2):
        if dir2_root is None:
            dir2_root=path
        trimmed_path=path[len(dir2_root):]
        # print(trimmed_path,files)
        if files!=[]:
            for i in range(len(files)):
                if os.path.exists(dir_name1+trimmed_path+os.path.sep+files[i]) is False:
                    os.remove(dir_name2+trimmed_path+os.path.sep+files[i])


directory('E:\\22','E:\\33')

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
空白学技术 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| salge 发表于 2021-9-8 10:55
olly2013 发表于 2021-9-8 10:31
提个建议:
可以在计算md5前,添加个文件大小是否相等的判断,如果不等,直接返回否
如果文件比较大,读 ...

嗯,真没想这问题,我改改.
olly2013 发表于 2021-9-8 10:31
提个建议:
可以在计算md5前,添加个文件大小是否相等的判断,如果不等,直接返回否
如果文件比较大,读取文件算md5还是慢了点

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
ymhld + 1 + 1 用心讨论,共获提升!

查看全部评分

johnny2020 发表于 2021-9-8 09:18
bachelor66 发表于 2021-9-8 09:35
这是不是同步啊?不是增量吧                  
JuncoJet 发表于 2021-9-8 09:50
cp -a
rsync
hxdzxzooo 发表于 2021-9-8 09:57
正在学,挺有意思的
系统学习还是有些枯燥,但管用啊
onoffon 发表于 2021-9-8 11:40
关键看效率和cpu占用
brooks 发表于 2021-9-8 12:44
感谢分享,有学到了新的知识
小木曾雪菜 发表于 2021-9-8 15:05
增量备份直接用rsync就行了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 04:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表