Python实现双文件夹文件同步:冗余文件删除需求及代码问题求助
实现两文件夹文件同步(删除不匹配文件)
原代码仅用于判断两个目录树是否完全一致,没有执行删除操作。要实现删除两边独有的文件/目录,最终让两个文件夹仅保留双方都存在的同名项,可以修改逻辑,在对比差异时直接处理删除操作,同时递归遍历子目录:
修改后的代码
import filecmp import os import shutil dir1 = "C:/Users/Lenovo/OneDrive/Escritorio/0" dir2 = "C:/Users/Lenovo/OneDrive/Escritorio/1" def sync_dirs(dir1, dir2, dry_run=True): """ 同步两个目录,删除双方独有的文件/目录 :param dir1: 第一个目录路径 :param dir2: 第二个目录路径 :param dry_run: 为True时仅打印要删除的内容,不实际执行;设为False执行真实删除 """ dirs_cmp = filecmp.dircmp(dir1, dir2) # 删除dir1中独有的文件和目录 for item in dirs_cmp.left_only: item_path = os.path.join(dir1, item) print(f"将删除 {dir1} 中的独有项: {item_path}") if not dry_run: if os.path.isfile(item_path): os.remove(item_path) elif os.path.isdir(item_path): shutil.rmtree(item_path) # 删除dir2中独有的文件和目录 for item in dirs_cmp.right_only: item_path = os.path.join(dir2, item) print(f"将删除 {dir2} 中的独有项: {item_path}") if not dry_run: if os.path.isfile(item_path): os.remove(item_path) elif os.path.isdir(item_path): shutil.rmtree(item_path) # 可选:删除同名但内容不匹配的文件(取消注释启用) # _, mismatch, errors = filecmp.cmpfiles(dir1, dir2, dirs_cmp.common_files, shallow=False) # for item in mismatch + errors: # print(f"文件不匹配或出错,将删除双方的 {item}") # if not dry_run: # os.remove(os.path.join(dir1, item)) # os.remove(os.path.join(dir2, item)) # 递归同步子目录 for common_dir in dirs_cmp.common_dirs: new_dir1 = os.path.join(dir1, common_dir) new_dir2 = os.path.join(dir2, common_dir) sync_dirs(new_dir1, new_dir2, dry_run) # 先执行dry_run=True预览删除内容,确认无误后改为False执行真实删除 sync_dirs(dir1, dir2, dry_run=True)
关键说明
- 安全预览模式:默认开启
dry_run=True,只会打印待删除的文件/目录,不会实际执行删除,方便你先确认操作内容,避免误删。确认无误后将参数改为False即可执行真实删除。 - 子目录递归处理:自动遍历所有嵌套子目录,确保整个目录树的同步。
- 内容不匹配处理:如果需要删除同名但内容不同的文件,取消代码中对应段落的注释即可。
- 风险提示:执行删除操作前,请务必备份重要文件,防止数据丢失。
内容的提问来源于stack exchange,提问作者Juanma Muñoz Lorite
相关产品推荐
相关产品推荐

