如何find目录中最新的修改文件的时间戳(recursion)?

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

我想避免使用任何沉重的东西,比如inotify 。 我不需要知道哪些文件已被更新,而只需要知道是否更新了文件。 而且,我不需要知道每一个变化,而只是知道在一个特定的时间间隔内是否发生了变化,这个变化是由过程dynamic决定的。

必须有一个相当简单的bash命令来做到这一点。 我不介意多次执行命令; 性能不是我最关心的这个用例。 但是,这个命令应该尽可能快。

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

我也开放更好的解决scheme。

其实我从另一个密切相关的问题中找到了一个很好的答案

我只修改了一下命令,以适应我的需求:

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

  1. %T@将修改时间作为unix时间戳返回,这正是我所需要的。
  2. sort -n按照数字排序时间戳。
  3. tail -1只保留最后/最高的时间戳。

它运行相当快, 我的整个家目录〜400毫秒,预期的目录〜30毫秒(使用time [command]测量)。

我只是想到了比以前更好的解决方案,这也让我知道被删除的文件。

这个想法是使用校验和,而不是所有文件的校验和; 相反,我们只能做一个时间戳的校验和。 如果有任何更改(新文件,删除文件,修改文件),那么校验和也会改变!

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

  1. '%T@,'将每个文件的修改时间作为unix时间戳返回,全部在同一行。
  2. cksum计算时间戳的校验和。
  3. ????
  4. 利润!!!!

实际上它甚至比以前的解决方案还要 (约20%),因为我们不需要排序(这是最慢的操作之一)。 即使校验和也会更快,特别是对于如此少量的数据(每个时间戳22个字节),而不是对每个文件进行校验和。

$ find ./ -name“* .sqlite”-ls在这里你可以使用这个命令获取你的文件的信息。使用过滤器来获取时间戳