You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 10:55:30