一种文档同步的方案

 

一开始将很多笔记放在云笔记本上面,后来发现笔记太零碎很多没有去整理,而且笔记本上面虽然可以写文档,但是没有word上面的直观正式,决定整理一些笔记归档到word上面,这样容易对整个知识体系有所整理,打通一些静脉。想了一些思路,最终使用云网盘的方法。当然了云网盘有一些隐私泄露的风险,要自行斟酌。

 

使用word记录,可以在左边点击想要跳转的章节,并且导出pdf也有目录可以看,比较清晰。

 

这里选择了很多人推崇云同步软件(这里不提到)。它可以在多个电脑之间同步文件,本着不相信云的观念,怕他一不小心将我的改动弄没了,也就是我添加了A,然后又添加了B,最后云出了bug,把我的文档同步到A的状态,这样我就得重新写了,之前出现过这种情况不管是自己的原因还是云的原因,所以额外的为它加了一个保险,自己写了一个本地备份的程序。

 

 

import datetime
import os
import os.path
import shutil
import filecmp
import time
import wx
import thread
from datetime import datetime 

TRAY_TOOLTIP = 'Backup Main'
TRAY_ICON = 'icon.jpg'

NUT_DRIVE_DIRECTORY = 'C:\\Users\\tanhangbo\\Desktop\\Share\\DOC'
BACKUP_DIRECTORY = 'D:\\Sync.bak'


def write_log(log_str):
    f = open(os.path.join(BACKUP_DIRECTORY, 'log.txt'), 'a');
    f.write("\n\n[---------->New Event]");
    f.write(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
    f.write(log_str);
    f.close;



##################################


def create_menu_item(menu, label, func):
    item = wx.MenuItem(menu, -1, label)
    menu.Bind(wx.EVT_MENU, func, id=item.GetId())
    menu.AppendItem(item)
    return item


class TaskBarIcon(wx.TaskBarIcon):
    def __init__(self):
        super(TaskBarIcon, self).__init__()
        self.set_icon(TRAY_ICON)
        self.Bind(wx.EVT_TASKBAR_LEFT_DOWN, self.on_left_down)


    def CreatePopupMenu(self):
        menu = wx.Menu()
        create_menu_item(menu, 'Say Hello', self.on_print_backup)
        menu.AppendSeparator()
        create_menu_item(menu, 'Exit', self.on_exit)
        return menu

    def set_icon(self, path):
        icon = wx.IconFromBitmap(wx.Bitmap(path))
        self.SetIcon(icon, TRAY_TOOLTIP)

    def on_left_down(self, event):
        print 'Tray icon was left-clicked.'

    def on_print_backup(self, event):
        print BACKUP_DIRECTORY

    def on_exit(self, event):
        wx.CallAfter(self.Destroy)


def icon_main():
    app = wx.PySimpleApp()
    TaskBarIcon()
    app.MainLoop()




#################################

def copy_file(sourceDir,targetDir):
    shutil.copy2(sourceDir,targetDir) 


def move_and_add_time(file_path):
    cur_date = datetime.now().strftime('%Y%m%d%H%M%S');
    new_file_path = file_path + "." + cur_date;
    shutil.move(file_path, new_file_path) 


def judge_size_and_backup(org_file_path, new_file_path):
    if not os.path.exists(new_file_path):
        write_log("\nnew file found " + org_file_path + "\nneed to copy to " + new_file_path)
        copy_file(org_file_path, new_file_path);
    else:

        backed_size = os.path.getsize(new_file_path);
        org_size = os.path.getsize(org_file_path);
        #if file changed, (backup) and (backup the backup)
        
        if org_size > backed_size:
            write_log("\nfile get larger " + org_file_path)
            move_and_add_time(new_file_path);
            copy_file(org_file_path, new_file_path);
        elif org_size< backed_size:
            write_log("\nfile get smaller " + org_file_path)
            move_and_add_time(new_file_path);
            copy_file(org_file_path, new_file_path);



def do_backup(base_dir, backup_dir):
    for root, dirs, files in os.walk(base_dir):
        for name in files:
            org_file_path = os.path.join(root, name);
            new_file_path = os.path.join(backup_dir, name);
            judge_size_and_backup(org_file_path, new_file_path);


def get_backup_directory(base_dir):
    backup_dir = base_dir + '.bak'
    if not os.path.exists(backup_dir):
        write_log("create new dir " + backup_dir);
        os.makedirs(backup_dir);
    return backup_dir

def perform_backup(base_dir):
    backup_dir = BACKUP_DIRECTORY;
    do_backup(base_dir, backup_dir)

def backup_main(threadName):
    while True:
        perform_backup(NUT_DRIVE_DIRECTORY)
        time.sleep(60)

#################################
        
def main():
    thread.start_new_thread( backup_main, ("Thread-1", ) )
    icon_main();



if __name__ == '__main__':
    main()

 

另外要准备一个icon文件(icon.jpg),放在同一个目录下,它跑起来的时候会在任务栏显示。

如果文件有改动,他会自行拷贝到备份文件夹。将他重命名为.pyw文件,可以后台运行。

 

 

这是实际的备份效果:

如果文件被同步坏了,可以从里面找,总能找得到的。

 

转载于:https://www.cnblogs.com/tanhangbo/p/5989017.html

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看rEADME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看rEADME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值