(src_folder)
| 6 | import public |
| 7 | |
| 8 | def initialize_backup_folder(src_folder): |
| 9 | print(src_folder) |
| 10 | file_names_in_db = set() |
| 11 | src_folder_name = os.path.basename(src_folder) # 提取源文件夹的名称 |
| 12 | backup_path = public.M('config').where("id=?", ('1',)).getField('backup_path') |
| 13 | if not backup_path.endswith('/'): |
| 14 | backup_path += '/' |
| 15 | target_directory = '{}/backup_site_file'.format(backup_path) # 备份文件所在的文件夹 |
| 16 | backup_folder = os.path.join(target_directory, src_folder_name) |
| 17 | init_marker = os.path.join(backup_folder, 'initialized.pl') |
| 18 | if os.path.exists(backup_folder): |
| 19 | data = public.M('crontab').where('sName=?', (src_folder,)).select() |
| 20 | if data: |
| 21 | cron_id = data[0]['id'] |
| 22 | backupTo = "localhost" |
| 23 | # 定义正则表达式,匹配形如 20240906150534_all_444444444444.com.zip 的文件 |
| 24 | pattern = re.compile(r'^\d{14}_(all_)?' + re.escape(src_folder_name) + r'\.zip$') |
| 25 | |
| 26 | # 初始化:检查是否存在标记文件 |
| 27 | if not os.path.exists(init_marker): |
| 28 | print("正在进行初始化...") |
| 29 | |
| 30 | # 扫描文件夹中的备份文件,并写入数据库 |
| 31 | if os.path.exists(backup_folder): |
| 32 | for filename in os.listdir(backup_folder): |
| 33 | print(filename) |
| 34 | # 使用正则表达式匹配文件名,并确保包含 src_folder_name |
| 35 | if pattern.match(filename) and src_folder_name in filename: |
| 36 | |
| 37 | |
| 38 | file_path = os.path.join(backup_folder, filename) |
| 39 | file_stat = os.stat(file_path) |
| 40 | size_in_kb = file_stat.st_size |
| 41 | # 修正后的上传路径拼接 |
| 42 | upload_path = os.path.join(backup_path, "backup_site_file", src_folder_name, filename) |
| 43 | cloud_backup_path = upload_path |
| 44 | # 查询数据库,看是否已存在该文件名 |
| 45 | existing_record = public.M('backup_site_file').where('name=?', (cloud_backup_path,)).find() |
| 46 | if existing_record: |
| 47 | |
| 48 | print(f"文件 {filename} 已存在,跳过插入。") |
| 49 | continue |
| 50 | # 插入数据库 |
| 51 | public.M('backup_site_file').add( |
| 52 | 'cron_id, type, name, filename, size, addtime, src_folder, backupTo', |
| 53 | (cron_id, 1 if 'all' in filename else 0, cloud_backup_path, cloud_backup_path, '{:.2f}'.format(size_in_kb), public.format_date(), src_folder, backupTo) |
| 54 | ) |
| 55 | public.writeFile(init_marker,"") |
| 56 | print("初始化完成") |
| 57 | |
| 58 | # 主入口 |
| 59 | if __name__ == "__main__": |
no test coverage detected