如何检查多个文件夹并删除文件名未在全部文件夹中匹配的文件?
多相机目录共有文件筛选方案
操作前置提醒
所有操作前请先完整备份三个相机目录的原始文件,避免误删导致数据丢失
方案1:Python脚本(推荐,适配12000文件量级无性能压力)
脚本逻辑:自动提取三个目录下所有tif文件名,计算三者的交集,仅保留所有目录共有的文件,非共有文件将被删除。你可以先测试打印待删除文件列表,确认无误后再执行真实删除操作。
import os # 请修改为你实际的三个相机文件夹绝对/相对路径 camera_dirs = [ "./Camera1", "./Camera2", "./Camera3" ] # 收集每个目录下的所有tif文件名存入集合 file_sets = [] for dir_path in camera_dirs: tif_files = set() for file_name in os.listdir(dir_path): file_full_path = os.path.join(dir_path, file_name) if os.path.isfile(file_full_path) and file_name.endswith(".tif"): tif_files.add(file_name) file_sets.append(tif_files) # 计算三个目录的共有文件名 common_files = set.intersection(*file_sets) print(f"识别到共有文件数量:{len(common_files)},前5个示例:{list(common_files)[:5]}") # 遍历每个目录删除非共有文件 for dir_path in camera_dirs: for file_name in os.listdir(dir_path): file_full_path = os.path.join(dir_path, file_name) if os.path.isfile(file_full_path) and file_name.endswith(".tif") and file_name not in common_files: # 测试阶段先注释下方os.remove行,仅打印待删除文件,确认无误后再取消注释执行删除 print(f"待删除:{file_full_path}") # os.remove(file_full_path)
如果你需要分两次比对(先比Camera1和Camera2,再用结果比Camera3),仅需调整交集计算逻辑即可,本质和上述逻辑完全一致。
方案2:命令行工具(适合Linux/macOS环境,无需写代码)
- 第一步提取三个目录的tif文件名存入临时文件:
ls ./Camera1/*.tif | xargs basename > c1.txtls ./Camera2/*.tif | xargs basename > c2.txtls ./Camera3/*.tif | xargs basename > c3.txt - 第二步计算三个文件的交集得到共有文件名清单:
comm -12 <(comm -12 <(sort c1.txt) <(sort c2.txt)) <(sort c3.txt) > common.txt - 第三步遍历每个目录,删除不在
common.txt中的tif文件即可。
Windows用户也可以通过PowerShell实现类似逻辑,复杂度高于Python脚本,更推荐直接用方案1。
内容的提问来源于stack exchange,提问作者Aaddrick Williams
相关产品推荐
相关产品推荐

