【问题标题】:How to get the time in which a directory was last modified?如何获取目录最后一次修改的时间?
【发布时间】:2011-11-11 16:41:00
【问题描述】:

我在看另一个问题:

Directory last modified date

它告诉我东西是如何工作的,但并没有真正给出任何解决方案。我如何获得最后修改目录的时间?我将利用这段时间来确定是否需要清除缓存,缓存的内容是根据目录的内容计算出来的。

另一种选择是递归遍历每个文件和子文件夹,但这可能会完全否定缓存的任何好处。据我所知,文件/文件夹的“mtime”和其他元数据缓存在某处,实际上并不需要每次检查时都读取文件(这就是为什么检查每个 memcached 文件的 mtime 仍然是比加载文件本身快得多,即使文件很小)。

那么...有没有什么好的、快速的方法来获取整个目录的最后修改时间戳?

【问题讨论】:

    标签: caching filesystems operating-system directory memcached


    【解决方案1】:

    好吧,你总是可以使用 ls -la 来获取目录文件的时间戳,但我认为这不是你要问的。

    你没有包括你想要解决这个问题的语言或环境,但在 php 中很容易:

    $filename = 'includes/';
    if (file_exists($filename)) {
        echo "$filename was last modified: " . date ("F d Y H:i:s.", filemtime($filename));
    }
    //echos includes/ was last modified: September 06 2011 17:51:10.
    

    操作系统确实会缓存该信息,但您可以使用以下命令擦除该缓存:

    http://www.php.net/manual/en/function.clearstatcache.php

    【讨论】:

    • 我在 Python 中工作,但我认为如果可行的话,每种语言都会有一个类比。这只会获取最后一次修改“目录”的时间,并且不会获取单个文件中的更改,对吧?
    • 好吧,是的,也不是,filemtime 方法适用于目录或文件。我的示例设置为检查一个目录。但是,检查文件将非常容易。只需使用 opendir() 读取目录中的所有文件,您也可以轻松检查这些文件。
    • 问题是目录很深(5-6层?)里面有很多文件。除非 opendir() 中的文件列表也被缓存,否则它检查缓存无效的成本可能比缓存首先给我的成本更高。我将运行一些基准测试。
    • 目录的深度无关紧要,只需在检查统计信息之前调用 clearstatcache() 就可以了。我过去做过这个,这些功能没有太多的时间成本。
    猜你喜欢
    • 2011-12-09
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    相关资源
    最近更新 更多