salge 发表于 2021-9-8 09:15

python 增量备份

参数1是源目录(要备份的目录),参数2是目标目录(备份保存到的目录)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)
    for i in range(len(dir1_list)):
      if os.path.exists(dir_name2+dir1_list) is False:
            os.mkdir(dir_name2+dir1_list)
    dir2_list=[]
    for path,dirs,files in os.walk(dir_name2):
      dir2_list.append(path)
    a=len(dir2_list)
    for i in range(len(dir2_list)):
      if os.path.exists(dir_name1+dir2_list) is False:
            os.rmdir(dir2_list)
#-------判断目录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
      # print(trimmed_path,files)
      if files!=[]:
            for i in range(len(files)):
                file1=os.path.join(dir_name1+trimmed_path+os.path.sep,files)
                file2=os.path.join(dir_name2+trimmed_path+os.path.sep,files)
                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
      # print(trimmed_path,files)
      if files!=[]:
            for i in range(len(files)):
                if os.path.exists(dir_name1+trimmed_path+os.path.sep+files) is False:
                  os.remove(dir_name2+trimmed_path+os.path.sep+files)


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

salge 发表于 2021-9-8 10:55

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

嗯,真没想这问题,我改改.

olly2013 发表于 2021-9-8 10:31

提个建议:
可以在计算md5前,添加个文件大小是否相等的判断,如果不等,直接返回否
如果文件比较大,读取文件算md5还是慢了点

johnny2020 发表于 2021-9-8 09:18

学了几天,没学下去

bachelor66 发表于 2021-9-8 09:35

这是不是同步啊?不是增量吧                  

JuncoJet 发表于 2021-9-8 09:50

cp -a
rsync
{:301_998:}

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就行了
页: [1] 2
查看完整版本: python 增量备份