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

如何用Python从多目录提取内容唯一的summary.txt文件路径

高效解决软链接导致的重复summary.txt路径去重问题

核心思路:利用操作系统文件标识去重

同一物理文件(包括软链接指向的目标文件)在操作系统中通过**设备号(st_dev)和inode号(st_ino)**唯一标识,不管访问路径如何变化,这两个值始终一致。相比逐文件内容比较,读取文件元数据的速度快几个数量级。

Python实现方案

方案1:基于inode+dev的精准去重

import os

def get_unique_summary_files(parent_dir):
    # 用字典存储唯一文件标识到路径的映射
    unique_files = {}
    for root, _, files in os.walk(parent_dir):
        for filename in files:
            if filename == "summary.txt":
                full_path = os.path.join(root, filename)
                # 获取文件的设备号和inode,生成唯一标识
                stat_data = os.stat(full_path)
                file_identifier = (stat_data.st_dev, stat_data.st_ino)
                # 仅保留首次遇到的路径(可根据需求修改为保留最短/最长路径等)
                if file_identifier not in unique_files:
                    unique_files[file_identifier] = full_path
    return list(unique_files.values())

# 使用示例
if __name__ == "__main__":
    parent_directory = "/your/parent_dir/path"
    unique_paths = get_unique_summary_files(parent_directory)
    for path in unique_paths:
        print(path)

方案2:基于真实路径的简化去重

如果不需要处理硬链接场景,也可以用os.path.realpath解析出文件的真实路径,再通过集合去重:

import os

def get_unique_summary_files(parent_dir):
    seen_real_paths = set()
    unique_paths = []
    for root, _, files in os.walk(parent_dir):
        for filename in files:
            if filename == "summary.txt":
                full_path = os.path.join(root, filename)
                real_path = os.path.realpath(full_path)
                if real_path not in seen_real_paths:
                    seen_real_paths.add(real_path)
                    unique_paths.append(full_path)
    return unique_paths

命令行工具方案(利用fdupes)

如果习惯用命令行,可以结合find和fdupes快速处理:

  1. 收集所有summary.txt路径:
find /your/parent_dir/path -name "summary.txt" > summary_paths.txt
  1. 用fdupes去重并保留第一个出现的文件:
fdupes -f < summary_paths.txt

-f参数会输出每个重复组的第一个文件,过滤掉后续的重复路径。

为什么这个方案比原方法高效?

  • 原方法用filecmp.cmp需要读取文件内容(至少部分字节)进行比对,大文件或文件数量多时会非常慢;
  • 本方案仅读取文件的元数据(inode/dev或真实路径),属于轻量级系统调用,性能提升显著;
  • 从根本上解决了软链接/路径别名导致的重复识别问题,无需依赖文件大小等不可靠的筛选条件。

内容的提问来源于stack exchange,提问作者yamada

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 17:45:16