如何使用 python 遍历所有子目录,并删除目录下重复的文件
微wx笑
2025-09-06【运维日志】
0
0关键字:
python
给定一个根目录,如何使用 python 遍历所有子目录,并删除目录下重复的文件,比如下面的文件名带(1)或(2)等的都是重复的:课标通用中考语文总复习第1部分专题1名句默写课件201904051197
给定一个根目录,如何使用 python 遍历所有子目录,并删除目录下重复的文件,比如下面的文件名带(1)或(2)等的都是重复的:
课标通用中考语文总复习第1部分专题1名句默写课件201904051197(1).pptx 课标通用中考语文总复习第1部分专题1名句默写课件201904051197(2).pptx 课标通用中考语文总复习第1部分专题1名句默写课件201904051197.pptx 课标通用中考语文总复习第1部分专题2语段综合课件201904051196(1).pptx 课标通用中考语文总复习第1部分专题2语段综合课件201904051196(2).pptx 课标通用中考语文总复习第1部分专题2语段综合课件201904051196.pptx 课标通用中考语文总复习第1部分专题3名著导读课件201904051195(1).pptx 课标通用中考语文总复习第1部分专题3名著导读课件201904051195(2).pptx 课标通用中考语文总复习第1部分专题3名著导读课件201904051195.pptx 课标通用中考语文总复习第1部分专题4语文综合运用课件201904051194(1).pptx 课标通用中考语文总复习第1部分专题4语文综合运用课件201904051194(2).pptx 课标通用中考语文总复习第1部分专题4语文综合运用课件201904051194.pptx
import os import sys import re import argparse def find_duplicate_files(root_dir, dry_run=True): """ 遍历目录树,找出所有带有数字编号的重复文件 """ deleted_count = 0 # 正则表达式匹配文件名中的数字编号部分 pattern = re.compile(r'(.*?)(\s*\(\d+\))(\.\w+)$') # 遍历所有目录和文件 for dirpath, _, filenames in os.walk(root_dir): print(f"\n当前目标: {dirpath}") for filename in filenames: print(f"\nfilename: {filename}") # 尝试匹配带数字编号的文件名模式 match = pattern.match(filename) if match: # 提取基础文件名(不含编号部分) base_name = match.group(1) + match.group(3) full_path = os.path.join(dirpath, filename) print(f"\nbase_name: {base_name}") print(f"\nfull_path: {full_path}") if base_name in filenames: print(f"\n文件存在: {base_name}") if dry_run: print(f"\n[模拟] 将删除: {full_path}") else: try: os.remove(full_path) print(f"\n已删除: {full_path}") deleted_count += 1 except Exception as e: print(f"\n删除失败 {full_path}: {e}") # sys.exit() return deleted_count def main(): parser = argparse.ArgumentParser(description='删除带数字编号的重复文件') parser.add_argument('root_dir', help='要处理的根目录路径') parser.add_argument('--execute', action='store_true', help='实际执行删除操作(默认是模拟运行)') args = parser.parse_args() if not os.path.isdir(args.root_dir): print(f"错误: {args.root_dir} 不是一个有效的目录") return print("正在搜索重复文件..." if not args.execute else "正在搜索并删除重复文件...") # 查找并处理重复文件 deleted_count = find_duplicate_files(args.root_dir, dry_run=not args.execute) if args.execute: print(f"\n操作完成! 共删除了 {deleted_count} 个文件") else: print(f"\n模拟运行完成! 共找到 {deleted_count} 个待删除文件") print("使用 --execute 参数实际执行删除操作") if __name__ == "__main__": main()
使用说明
将上述代码保存为
remove_duplicates.py
通过命令行运行脚本:
# 模拟运行(只显示将要删除的文件,不实际删除) python remove_duplicates.py /path/to/your/root/directory # 实际执行删除操作 python remove_duplicates.py /path/to/your/root/directory --execute
功能说明
脚本会递归遍历指定根目录下的所有子目录
识别文件名中包含
(1)
,(2)
等数字编号的文件如果原始文件(无编号版本)存在,则删除所有带编号的副本
如果原始文件不存在,则保留编号最小的文件,删除其他副本,并尝试将保留的文件重命名为原始名称
默认情况下为模拟运行模式,添加
--execute
参数后才实际执行删除操作
注意事项
运行前请确保备份重要文件
首次运行时建议使用模拟模式(不加
--execute
参数)查看将要执行的操作脚本只会处理文件名模式匹配的文件,不会比较文件内容
使用此脚本前,请务必确认您了解它将执行的操作,并在重要数据上做好备份。
程序中的 “# sys.exit()”我添加了注释;
在调试的时候可以把注释去掉方便调试;
本文由 微wx笑 创作,采用 署名-非商业性使用-相同方式共享 4.0 许可协议,转载请附上原文出处链接及本声明。
原文链接:https://www.ivu4e.cn/blog/service/2025-09-06/2123.html
上一篇:阿里云99元一年的云服务器
下一篇:返回列表