关于linux:如何在目录中找到最新修改文件的时间戳(递归)?

How to find the timestamp of the latest modified file in a directory (recursively)?

我正在处理一个进程,需要在递归地对指定目录中的任何文件进行任何更改时重新启动。

我想避免使用任何重的东西,比如inotify。 我不需要知道哪些文件已更新,而只需知道文件是否已更新。 此外,我不需要通知每个更改,而只需知道是否在特定时间间隔内发生了任何更改,由流程动态

必须有一种方法可以使用相当简单的bash命令来完成此操作。 我不介意多次执行命令; 性能不是我对此用例的主要关注点。 但是,命令最好尽可能快。

我需要的唯一输出是最后一次更改的时间戳,所以我可以将它与我在内存中存储的时间戳进行比较。

我也愿意接受更好的解决方案。


实际上,我从另一个密切相关的问题中找到了一个很好

我只修改了一些命令以使其适应我的需要:

find . -type f -printf '%T@
' | sort -n | tail -1

  • %T@将修改时间作为unix时间戳返回,这正是我所需要的。
  • sort -n以数字方式对时间戳进行排序。
  • tail -1仅保留最后/最高时间戳。
  • 它运行得相当快;在我的整个主目录上约400毫秒,在目标目录上约30毫秒(使用time [command]测量)。


    我只想到一个比前一个更好的解决方案,这也让我知道已删除的文件。

    我们的想法是使用校验和,但不是所有文件的校验和;相反,我们只能对时间戳进行校验和。如果有任何改变(新文件,删除文件,修改过的文件),那么校验和也会改变!

    find . -type f -printf '%T@,' | cksum

  • '%T@,'将每个文件的修改时间作为unix时间戳返回,全部在同一行。
  • cksum计算时间戳的校验和。
  • ????
  • 利润!!!!
  • 它实际上比以前的解决方案更快(约20%),因为我们不需要排序(这是最慢的操作之一)。即使校验和也会快得多,特别是在如此少量的数据(每个时间戳22个字节)上,而不是对每个文件进行校验和。


    $ find ./ -name"* .sqlite"-ls
    在这里,您可以使用此命令获取文件的信息。使用过滤器获取时间戳