【问题标题】:Efficient way to recognise an unchanged directory识别未更改目录的有效方法
【发布时间】:2016-11-19 20:20:27
【问题描述】:

有没有办法有效地避免 os.walk 进入目录树的一个分支,该分支自上一个 os.walk 以来没有更改过?

我正在使用自定义 Python 应用程序扫描文件系统的内容,并存储从内容生成的技术数据并将其存储在数据库中。文件系统很大,目前扫描过程需要 4 个多小时,所以我正在寻找一种方法来动态识别文件系统的哪些分支/目录不需要重新扫描(因为没有变化和数据已经存在)。

我一直在研究在数据库中存储目录校验和,在实际处理任何目录之前,运行当前校验和以查看是否有任何子文件夹发生了变化。然而,运行当前校验和需要很长时间 - 可能与当前的“扫描所有内容”方法一样多。

我见过像Watchdog 这样的包,它基本上来回运行连续扫描,但是由于这个文件系统太大,可能需要很长时间(并且未知)才能真正看到数据库已更新。

【问题讨论】:

  • 我将尝试不同的解决方案:使用每个目录中存在的 windows lastModified 元数据,当文件在其中添加、删除或更改时更新(但不是其子目录)。 “os.path.getmtime(dirpath)”检索需要记录在数据库中以供将来比较的最后修改的元数据。此操作看起来又快又轻,它可能是在大部分情况下节省繁重扫描的可行选择。

标签: python python-3.5 checksum directory-structure os.walk


【解决方案1】:

我能够使用“os.path.getmtime(dirpath)”为目录扫描状态添加记录。通过在扫描目录之前拉出这条记录,我可以检查它是否已经被扫描,如果它已经被扫描,那么自从它完成后目录是否发生了变化。现在只扫描新目录或修改目录中的文件。

【讨论】:

    猜你喜欢
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 2020-10-08
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多