【问题标题】:How can I detect if some file in a subdir changed?如何检测子目录中的某些文件是否更改?
【发布时间】:2015-05-29 17:26:19
【问题描述】:

基本上我有一个大目录(>10GB)(每个子目录只有几个其他子目录)并且想要对任何更改的文件做某事。我不能只浏览所有文件并检查,因为它需要很长时间并且使用了大约 90% 的 CPU :(。

基本上是这样的:

dir
dir/subA
dir/subA/subAsubA
dir/subA/subAsubB
...
dir/subB
dir/subB/subBsubA
dir/subB/subBsubB
...
dir/SubC
dir/SubD
...

我的想法是这样的(subBsubA chaged 中的文件“test”):

Check dir
 -> dir changed
   -->Check subA
      -> subA didn't change
   -->Check subB
      -> subB changed
      --> Check subBsubA
          -> subBsubA changed
             --> Check all files

但遗憾的是,文件的更改只会影响直接父目录的修改日期:(

【问题讨论】:

  • this 帮忙吗?
  • 您想实时执行此操作,还是仅作为定期运行脚本的一部分?在前一种情况下,@Aereaux 的评论绝对适用。在后者中,只需使用stat 检查每个文件的“最后修改日期”以查看它最后一次更改的时间 - 可能将元数据存放在某个地方以便在下次运行时进行比较,或者只是检查它是否在当前日期/时间的某个阈值内...
  • stackoverflow.com/questions/511463/…。这可能会有所帮助。
  • @twalberg Sth like stat 实际上是一个更好的解决方案,因为我无法确定脚本是否一直在运行,文件可能会被更改。但是就像我说的那样,为所有子目录执行此操作需要花费大量时间和资源,而且我认为不可能仅在一个父目录上执行此操作

标签: linux console sh


【解决方案1】:

正如@Aereaux 指出的那样,您可能需要inotify,自 2.6.13 起在 Linux 中可用。见http://en.wikipedia.org/wiki/Inotify

还有inotify-tools 可用于命令行。 http://techarena51.com/index.php/inotify-tools-example/

【讨论】:

    猜你喜欢
    • 2018-08-10
    • 1970-01-01
    • 2010-09-08
    • 2021-11-26
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多