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

递归扫描文件夹并获取各目录最新atime的问题排查

递归获取目录及子目录最新访问时间(atime)解决方案

问题背景

现有文件夹结构如下:

myfolder/
myfolder/a/
myfolder/a/1/
myfolder/a/1/i.txt
myfolder/a/1/ii.txt
myfolder/a/1/iii.txt
myfolder/a/2/
myfolder/a/2/i.txt
myfolder/a/2/ii.txt
myfolder/a/2/iii.txt
myfolder/b/
myfolder/b/3/
myfolder/b/3/i.txt
myfolder/b/3/ii.txt
myfolder/b/3/iii.txt
myfolder/b/4/
myfolder/b/4/i.txt
myfolder/b/4/ii.txt
myfolder/b/4/iii.txt

需求:递归扫描目录,获取每个目录及其下游所有文件的最新atime并打印,父目录需汇总自身文件及所有子目录的最新atime。

原代码运行后出现子目录最新atime比父目录更新的问题,核心原因是递归调用子目录时,未将子目录的统计结果同步到父目录的时间计算中。

原代码问题分析

原drill_directory函数处理子目录时,仅执行递归调用但未接收返回值,导致父目录只能统计自身文件的访问时间,完全忽略了子目录下的最新时间数据。

修正后的代码

import os
import time

def drill_directory(directory):
    most_recent = 0.0
    # 可选:若需将目录自身的atime纳入统计,取消以下两行注释
    # dir_atime = float(os.path.getatime(directory))
    # most_recent = dir_atime

    for entry in os.listdir(directory):
        entry_path = os.path.join(directory, entry)
        if os.path.isfile(entry_path):
            atime = float(os.path.getatime(entry_path))
            if atime > most_recent:
                most_recent = atime
        elif os.path.isdir(entry_path):
            # 接收子目录返回的最新atime,更新当前目录的统计值
            sub_dir_recent = drill_directory(entry_path)
            if sub_dir_recent > most_recent:
                most_recent = sub_dir_recent
    
    # 转换为可读时间格式并打印
    print(time.ctime(most_recent), directory)
    # 返回当前目录的最新atime,供父目录统计使用
    return most_recent

# 替换为你的目标目录路径
drill_directory('/Users/Admin/Downloads/')

关键改动说明

  1. 增加返回值:让drill_directory函数返回当前目录及其子目录的最新atime,确保父目录能获取到子目录的统计结果。
  2. 同步子目录数据:处理子目录时,将递归调用返回的时间值与当前目录的most_recent对比,更新为更大的时间值。
  3. 可选目录自身时间:如果需要把目录自身的访问时间也纳入统计范围,可取消代码中对应的注释行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 07:04:58