增量备份

amendment-back-up的Python项目详细描述


用于文件比较和新文件备份的Python类

作者:悉尼大学的孙宇

电子邮件:sunyu0410@gmail.com

网站:https://github.com/sunyu0410/AmendmentBackUp

动机

在备份大量数据时,通常 最好只复制修改过的和新的文件,而不是简单地 覆盖整个目录。AmendmentBackUpABU)类 提供了一个简单的接口来执行此操作。不需要依赖项 除了Python 3标准库之外

设计

假设我们有两个文件夹,一个源文件夹dir1,您有 最近的文件和一个引用文件夹dir2,其中包含 你以前的备份。ABU所做的是比较 dir1dir2中的文件一起,并将文件复制到第三个 目标文件夹dst

一个简单的例子

fromAmendmentBackUpimport*createDemo()abu=AmendmentBackUp(dir1=r"demo/dir1",dir2=r"demo/dir2",dst=r"demo/dst")abu.compare()abu.backup()

解释

假设您有dir1dir2(以及dst来复制 文件到),具有以下树结构:

dir1 (source, recently updated)
|   file1.txt
|   file2.txt (modified)
|   file3.txt (new)
|
+---subfolder1
|       file4.txt
|
+---subfolder2
|       file5.txt
|       file6.txt (modified)
|
\---subfolder3 (new)
        anyfile.txt

dir2 (reference, e.g. a previous backup)
|   file1.txt
|   file2.txt
|   file7.txt
|
+---subfolder1
|       file4.txt
|
\---subfolder2
        file5.txt
        file6.txt

dst (destination)

在本例中,我们希望在dir1

中复制修改后的新文件
file2.txt
file3.txt
subfolder2/file6.txt

以及新文件夹:

subfolder3

通过调用

abu=AmendmentBackUp(dir1=r'path_to/dir1',dir2=r'path_to/dir2',dst=r'path_to/dst')

顺便说一下,createDemo()将创建一个演示文件夹 上述结构。启动后,调用以下ABU 处理方法:

  • abu.compare():通过遍历所有文件和 文件夹中的文件夹{TT3}$,并检查相应的存在 dir2.
      中的对应项
    • 如果为负数,则会将文件或文件夹添加到复制列表中;
    • 如果为正,则比较两个对应的文件(来自^{tt3})$ 和dir2,分别使用时间戳进行浅比较 以及文件大小);
      • 如果两个文件不匹配,它会将文件添加到副本中 列表;
      • 否则,它将继续到下一个。
  • abu.backup():复制复制列表中的文件和文件夹。
    • 将首先复制文件夹如果父文件夹 复制后,将跳过任何子文件夹;
    • 接下来将复制文件。如果文件属于复制的任何文件夹 在上一步中,将跳过它。
  • 备份过程的元数据将存储在名为 _abu带有时间戳(年-月-日-时-分-秒) dst文件夹。其中包括
- abu_log.txt      Log file
- abu_obj.pickle   ABU object of this backup task
- dir1_tree.txt    Tree structure of dir1 (source)
- dir2_tree.txt    Tree structure of dir2 (reference)
- dst_tree.txt     Tree structure of dst (destination)

结果

以下是备份后dst的树结构:

dst
|   file2.txt
|   file3.txt
|
+---subfolder2
|       file6.txt
|
+---subfolder3
|       anyfile.txt
|
\---_abu_20190717101307
        abu_log.txt
        abu_obj.pickle
        dir1_tree.txt
        dir2_tree.txt
        dst_tree.txt

如果要将文件添加到上一个backdir2,则可以 只需将dst设置为dir2

限制

当源文件夹dir1是自然文件夹时,ABU最适合 引用文件夹dir2的增长自然生长的意思是 不应该有太多的重命名或移动子文件夹 从dir2dir1。否则,使用版本控制系统 可能是更好的选择,因为ABU不会跟踪任何 文件夹或文件。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
安卓中通过TCP发送时java文件损坏   Java测试预期=异常失败,断言错误   java ssh4 LazyInitializationException   java是否可以在集合中添加重复项?   java是一个免费的开源数据库管理工具   java是否可以在导出的html中嵌入图像   编译器构造解释一些东西,并用Java运行生成的字节码?   java KeyPairGenerator未生成随机密钥   java使用正则表达式生成字符串而不是匹配字符串   java中的多线程线程间通信   具有复合密钥的java Hibernate合并问题   java不能在MainActivity类之外使用SharedReferences变量   正在获取切割/零件异常消息。使用java Spring ControllerAdvice   java tomcat漏洞讨论   javascript在Java中实现“system”命令   java如何在JUnit5*中加载*Spring测试上下文之前获取回调?   java bluej关于缺少返回语句   JavaSpringBoot@ModelAttribute包含使用字符串键的其他模型   从可选中抛出异常。ifPresent()Java 8