【问题标题】:Check last modified directory检查最后修改的目录
【发布时间】:2016-04-03 23:31:01
【问题描述】:

我想在我的 Linux 上执行一个命令(例如“find”)来列出在过去 N 分钟内内容被修改的所有目录。

例如,我有一个目录“/sites”,其中至少包含 300k 个文件/子目录。我需要运行一个非常快速且经过优化的命令,列出在过去 N 分钟内修改过的文件的目录。

下面的命令列出了所有在最后一分钟修改过的文件(这很棒),但至少需要 3 分钟才能运行:

find /sites/ -type f -mmin -1

下面这个命令要快得多,不超过5秒!但由于某种原因,结果不一致,因为该命令没有列出所有在其中更改了文件的目录。有些目录不见了,我不知道为什么。

find /sites/ -type d -mmin -1

我做错了吗?

【问题讨论】:

  • 如果有一个优化的内部命令会很好......我认为在 ext3 中更新文件时,上面的所有目录也会更改修改日期......跨度>
  • 我相信我的最后一条评论非常错误并删除了它(刚刚使用ls -alh 进行了测试).. 如果您为每个顶级目录分别运行 find 会发生什么,例如类似的东西,for i in /sites/; do find $i -type d -mmin -1; done; 同样的结果?
  • 另外,在您运行 find 命令和检查目录内容之间,目录是否有文件更改?
  • @Clayton 我到服务器后会测试你的代码,好吗?但是我在更改任何文件后执行了我的“查找”代码方式,因此应该打印目录。

标签: php linux apache centos server


【解决方案1】:

下面这个命令要快得多,不超过5秒! 但由于某种原因,结果不一致导致此命令 没有列出所有在其中更改了文件的目录。 有些目录不见了,我不知道为什么。

find /sites/ -type d -mmin -1

这仅仅是因为该命令只查找已更改的目录,并且就地更改目录中预先存在的文件的内容不需要更改目录的内容(文件名和 inode 号)。 因此,要找到文件被修改的目录,检查单个文件的修改日期是必不可少的,但是一旦找到修改的文件,我们可以通过进入下一个目录来缩短过程当前的;不幸的是,find 效率不高:

find /sites/ -type d -exec find {} -mindepth 1 -maxdepth 1 -mmin -1 -ls -quit \;

(这会列出每个目录中最近修改的第一个条目,如果有的话。)

如果这还不够快,可以使用专门的小 C 程序。

【讨论】:

    猜你喜欢
    • 2016-08-01
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 2011-02-25
    • 2012-05-29
    • 2012-02-15
    相关资源
    最近更新 更多