# file_copy_by_folder **Repository Path**: justonlyyo/file_copy_by_folder ## Basic Information - **Project Name**: file_copy_by_folder - **Description**: https://gitee.com/justonlyyo/file-copier 的姊妹项目,不同的是前者按照文件拷贝,后者按照 目录拷贝. - **Primary Language**: Python - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-12-28 - **Last Updated**: 2024-01-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # file_copy_by_folder ## 介绍 https://gitee.com/justonlyyo/file-copier 的姊妹项目,不同的是前者按照文件拷贝,后者按照 目录拷贝. ## 软件架构 基于 pexpect 和 paramiko 开发 ## 工作逻辑 ### 初始化 初始化脚本在每次启动程序时运行 1. 检测数据库的记录是否为空,不为空跳转到,为空下一步 2. 扫描源目录。整理出来目录和文件的信息。分别写入对应的2个表 3. 启动一个线程,每隔1小时检查一下是否有新的目录生成, 检查的时间放在每个整点的05分 > 目录和文件表逻辑上有外键关系,但是为了减少操作上的约束,并没有设置外键 ### 工作流程 #### 1. 加载数据 1. 从数据库的目录表格检查是否有拷贝中的目录(status == 1),如有,放入处理队列的第一位 2. 查询待拷贝的目录(status == 0),以目录名正序排列(本质上是以时间正序排列),依次放入工作队列 #### 2. 处理队列 ##### 如果这个目录是个拷贝到一半的目录: 1. 比对本地的此目录和服务端的同名目录的差异,挑出已拷贝完成的部分。 2. 将这些已拷贝完成的部分,移动到临时备份目录 3. 等待此目录的复制完成 4. 检查拷贝是否成功 ##### 如果这个目录是全新的目录: 1. 比对本地的此目录和服务端的同名目录的差异,挑出已拷贝完成的部分。 2. 将这些已拷贝完成的部分,移动到临时备份目录 3. 等待此目录的复制完成 4. 检查拷贝是否成功 #### 相关逻辑 ##### 比较目录的逻辑 比较本地和服务端的同名目录的文件名和文件大小 * 不存在就是没拷贝 * 存在就比较大小,大小一致就是拷贝完成,不一致就是拷贝到一半,算作没拷贝 ##### 检查拷贝是否成功的逻辑 1. 列出服务端此目录的全部文件名和大小。 2. 列出本地此目录的全部文件名和大小,如果是个中断过又继续拷贝的目录,不要忘记临时备份目录也要包含进去。 3. 如果2者的文件名和大小全部一致,则删除本地的源目录,如果是个中断过又继续拷贝的目录,不要忘记删除临时备份目录 4. 如果出现不一致的情况,保留本地源目录和记临时备份目录(如果有)。标记数据库中对应的文件夹拷贝记录的状态和错误信息。 ## 安装教程 1. xxxx 2. xxxx 3. xxxx ## 使用说明 1. xxxx 2. xxxx 3. xxxx