文件夹同步

简介: # coding=utf-8import osimport sysimport timeimport reimport shutilclass CLASS_WALK_FILE: def __init__(self, max_size=1024): self.

 

# coding=utf-8

import os
import sys
import time
import re
import shutil

class CLASS_WALK_FILE:
    def __init__(self, max_size=1024):
        self.m_max_size = max_size
        self.m_log_fp = open("dir_sync.txt", 'w')

    def set_src_path(self, src_path):
        self.m_src_path = src_path

    def set_dst_path(self, dst_path):
        self.m_dst_path = dst_path

    def set_file_filter(self, file_filter):
        self.m_file_filter = file_filter
        
    def show_file_info(self, src_file):
        sp = os.path.split(src_file)
        print(sp[0], sp[1])
        print("size:", os.path.getsize(src_file))
        print("created:", time.ctime(os.path.getctime(src_file)))
        print("modified:", time.ctime(os.path.getmtime(src_file)))

    def file_need_copy(self, src_file, dst_file):
        suffix = os.path.splitext(src_file)[-1]
        if suffix in self.m_file_filter:
            return 0
        if os.path.exists(dst_file) == False:
            return 1
        if os.path.getsize(src_file) != os.path.getsize(dst_file):
            log_info = "\n differ file size %s"%(src_file)
            self.m_log_fp.write(log_info)
            return 1
        
    def copy_file(self, src_file, dst_file):
        sp = os.path.split(dst_file)
        if os.path.exists(sp[0]) == False:
            os.makedirs(sp[0])
        if self.file_need_copy(src_file, dst_file):
            log_info = "\ncopy file %s \n => %s"%(src_file, dst_file)
            self.m_log_fp.write(log_info)
            shutil.copy(src_file, dst_file)

    def handle_file1(self, src_file):
        if os.path.getsize(src_file) < self.m_max_size:
            return
        dst_file = src_file.replace(self.m_src_path, self.m_dst_path)        
        self.copy_file(src_file, dst_file)
            
    def walk_file1(self, src_path=0):
        if src_path == 0:
            src_path = self.m_src_path
        list = os.listdir(src_path)
        print("walk_file1 handle dir ", src_path)
        log_info = "\nwalk_file1 handle dir %s"%(src_path)
        self.m_log_fp.write(log_info)
        for fi in list:
            filepath = os.path.join(src_path,fi)
            if os.path.isdir(filepath):
                self.walk_file1(filepath)
            else:
                self.handle_file1(filepath)

    def handle_file2(self, dst_file):
        src_file = dst_file.replace(self.m_dst_path, self.m_src_path)        
        if os.path.exists(src_file) == False:
            #print("delet file ", dst_file)
            log_info = "\n delete file %s"%(dst_file)
            self.m_log_fp.write(log_info)
            os.remove(dst_file)
        
    def walk_file2(self, dst_path=0):
        if dst_path == 0:
            dst_path = self.m_dst_path
        list = os.listdir(dst_path)
        print("walk_file2 handle dir ", dst_path)
        log_info = "\nwalk_file2 handle dir %s"%(dst_path)
        self.m_log_fp.write(log_info)
        for fi in list:
            filepath = os.path.join(dst_path,fi)
            if os.path.isdir(filepath):
                self.walk_file2(filepath)
            else:
                self.handle_file2(filepath)

                
my_class = CLASS_WALK_FILE(10*1000)

filter_list = [".exe", ".bin"]
my_class.set_file_filter(filter_list)

my_class.set_src_path("F:\\07_ebook\\vdisk")
my_class.set_dst_path("\\\\192.168.31.1\\文档\\vdisk")

#if not exist in src or differ from src, copy to dst
my_class.walk_file1() 

#if not exist in src, delete dst
my_class.walk_file2() 

 

目录
相关文章
|
7月前
快速批量重命名文件(夹)
该文介绍了如何使用一个工具进行文件批量处理,包括重命名和删除特定文字。首先,从百度网盘或蓝奏云获取工具,然后打开工具进入文件批量复制功能。选择“重命名”,将需要改名的文件拖入,按照示例改为指定格式。接着,利用“文字批量替换规则”去除文件名中的特定文字,如“文本”。设定规则后保存并执行,通过“以此参照执行”应用规则。最后,将文件拖入并执行,即可完成批量重命名或清理文件名中的无效文字。
|
7月前
|
Windows
OneDrive同步本地任意其它文件夹——mklink
OneDrive同步本地任意其它文件夹——mklink
100 1
|
缓存 知识图谱
SVN培训笔记(下拉项目、同步修改、添加文件、修改文件、删除文件、改名文件等)
为了方便新加入团队的员工熟悉团队写作开发。为了将好东西分享给广大网友和初入职场的小白。将SVN内部员工培训文档公开,以方便更多的人,提高知识获取速度,尽快熟悉协同开发。本文档培训员工对于SVN的基本操作,这些操作是开发过程中最常用的操作。
SVN培训笔记(下拉项目、同步修改、添加文件、修改文件、删除文件、改名文件等)
文件复制操作
文件复制操作
69 0
VSS中上传一个文件夹(包括子文件夹和文件)
VSS中上传一个文件夹(包括子文件夹和文件)
目录的操作
目录的操作
101 0
|
测试技术 Python
一日一技:导入父文件夹中的模块并读取当前文件夹内的资源
一日一技:导入父文件夹中的模块并读取当前文件夹内的资源
125 0
|
JSON 数据格式
批量遍历指定类型的文件及文件夹,并将其复制到新的文件夹
批量遍历指定类型的文件及文件夹,并将其复制到新的文件夹
文件和文件夹的操作——文件夹的操作
文件和文件夹的操作——文件夹的操作
143 0
文件和文件夹的操作——文件夹的操作