# -*- coding: utf-8 -*- """ 删除 A类(186) + B1类(36) 共 222 个已验证重复旧文件。 铁律:仅当「新结构副本存在」时才删除旧文件,否则跳过并报错,绝不盲删。 C类(39) 与 b2(9) 不在此脚本处理范围。 """ import json, os ROOT = "docs" d = json.load(open('docs_cmp_result2.json', encoding='utf-8')) content_dup = d['content_dup'] # [old, new] name_diff = d['name_diff'] # [old, om, os, new, nm, ns] # b2 旧路径集合(已抢救,不可删) b3 = json.load(open('docs_cmp_result3.json', encoding='utf-8')) b2_old = set() for row in b3.get('b2', []): b2_old.add(row[0]) def norm(p): return os.path.normpath(os.path.join(ROOT, p)) delete_list = [] # (old_abs, reason, new_abs) # A类 for old, new in content_dup: delete_list.append((norm(old), 'A-content_dup', norm(new))) # B1类 = name_diff 中不在 b2 的 b1_count = 0 for row in name_diff: old, new = row[0], row[3] if old in b2_old: continue delete_list.append((norm(old), 'B1-name_diff', norm(new))) b1_count += 1 print("待删总数:", len(delete_list), "(A=%d, B1=%d)" % (len(content_dup), b1_count)) deleted, skipped = [], [] for old_abs, reason, new_abs in delete_list: if not os.path.isfile(new_abs): skipped.append((old_abs, "NEW_MISSING:" + new_abs)) continue if not os.path.isfile(old_abs): skipped.append((old_abs, "OLD_MISSING")) continue try: os.remove(old_abs) deleted.append((old_abs, reason)) except Exception as e: skipped.append((old_abs, "ERR:" + str(e))) print("DELETED:", len(deleted)) print("SKIPPED:", len(skipped)) for p, r in skipped: print(" SKIP", p, "::", r)