使用python的aligo库实现阿里云盘多端同步

借助aligo库,写了两个函数,第一个本地文件上传同步,并删除云端不同的文件;第二个下载同步函数,将云端文件下载,并删除,云端没有的文件。

这里面的逻辑是,每台机器在工作前都需要执行一遍下载同步,保证本地最新文件和网盘内容相同,工作结束以后,都需要执行上传同步命令,保证云端是最新的工作内容。

下载同步=》工作=》上传同步,就是这个工作逻辑,才不会出错,更复杂的工作逻辑需要自己摸索。

'''
Author: zzx
Date: 2022-02-28 11:33:50
LastEditors: zdl
LastEditTime: 2022-08-19 15:44:35
FilePath: \markdown写杂谈d:\BaiduNetdiskWorkspace\00typora\aligo_sync.py
Description: 

Copyright (c) 2022 by zdl, All Rights Reserved. 
'''
from aligo import Aligo
import os
from win32com.shell import shell,shellcon
#定义上传同步函数
def upsync(ali,local_folder,yun_folder):
    #上传同步:1本地为主上传,2并将云端多余的文件删除,3最后再进行一次双端同步
    #1 以本地为主上传
    print('\n以本地为主上传文件\n')
    remote_folder=ali.get_folder_by_path(yun_folder)
    ali.sync_folder(local_folder,remote_folder.file_id,True)
    
    #2 然后比较两端文件差异,比较A和cloud的差异,然后删除cloud文件
    print('\n比较本地文件和云端文件差异,并删除云端多余文件\n')
    # 获取local_folder下的所有文件 # 转为 {文件名:文件路径} 字典模式
    local_files = {}
    for f in os.listdir(local_folder):
        local_file = os.path.join(local_folder, f)
        local_files[f] = local_file
    # 获取remote_folder下的所有文件 # 转为 {文件名:BaseFile对象} 字典模式
    remote_files={}
    for f in ali.get_file_list(remote_folder.file_id):
        remote_file = f.name
        remote_files[remote_file] = f   
    #进行比较,删除云端文件到回收站
    for f in remote_files:
        remote_file = remote_files[f]
        # 如果云端文件存在,且在本地也存在
        if f not in local_files:
            # 本地不存在,删除云端文件
            ali.move_file_to_trash(remote_file.file_id)
            print(f'删除云端文件 {remote_file.name}')
    print('\n云端删除结束\n')
    #再次双端同步以防改动
    print('\n再次双端校验\n')
    ali.sync_folder(local_folder,remote_folder.file_id)
    print('\n双端校验完毕\n')
    
#删除本地文件的函数
def deltorecyclebin(filename):
    debug=False
    print('deltorecyclebin', filename)
    # os.remove(filename) #直接删除文件,不经过回收站
    if not debug:
        res= shell.SHFileOperation((0,shellcon.FO_DELETE,filename,None, shellcon.FOF_SILENT | shellcon.FOF_ALLOWUNDO | shellcon.FOF_NOCONFIRMATION,None,None))  #删除文件到回收站
        if not res[1]:
            os.system('del '+filename)
#下载同步,应该以云端为主,将本地没有的文件从云端下载
def downsync(ali,local_folder,yun_folder):
    print('\n以云端为主同步文件\n')
    remote_folder=ali.get_folder_by_path(yun_folder)
    ali.sync_folder(local_folder,remote_folder.file_id,False)
    print('\n云端文件下载完毕\n')
    # 获取local_folder下的所有文件 # 转为 {文件名:文件路径} 字典模式
    local_files = {}
    for f in os.listdir(local_folder):
        local_file = os.path.join(local_folder, f)
        local_files[f] = local_file
    # 获取remote_folder下的所有文件 # 转为 {文件名:BaseFile对象} 字典模式
    remote_files={}
    for f in ali.get_file_list(remote_folder.file_id):
        remote_file = f.name
        remote_files[remote_file] = f 
    print('\n检查本地文件是否需要删除\n')
    #进行比较,删除本地文件到回收站
    for f in local_files:
        local_file = local_files[f]
        # 如果云端文件存在,且在本地也存在
        if f not in remote_files:
            # 云端不存在,删除本地文件
            deltorecyclebin(local_file)
            print(f'删除本地文件 {local_file}')
    print('\n检查本地文件处理完毕\n')
if __name__ == '__main__':    
    ali = Aligo()
    local_folder='E:/test/'#本地同步文件路径
    yun_folder='test'#远程文件路径
    
    upsync(ali,local_folder,yun_folder) #上传同步  
    # downsync(ali,local_folder,yun_folder)# 下载同步,现在会删除本地文件

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值