shell - 基于包含的文件内容的目录的上次更改时间?

标签 shell directory find monitoring filesystemwatcher

是否可以计算目录的最后修改时间,同时考虑到更改的文件内容?

我们正在尝试观察一系列上传目录以确定用户 FTP session 何时完成。

用户正在将一组文件上传到特定目录,我们希望检测该目录中的最后一个文件在 N 分钟内没有更改的时间。 (我们使用它作为“FTP session 完成”的代理。)

我们以此开始查找空闲时间超过 5 分钟但少于 10 分钟的目录:

find . -mmin +5 -mmin -10 -type d -ls

此处使用的目录时间戳基于最近文件添加到目录的时间。

我已阅读Directory last modified date很明显,读取目录的 mtime 或 mmin 是行不通的,因为当目录中的文件内容更新时它不会改变。因此,上述内容将不起作用,因为如果最后一个文件是一个大文件,可能需要超过 10 分钟才能上传,那么当此触发时,目录将不会真正处于空闲状态(即所有文件都未更改)。

是否有基于 shell 的替代方案(最好是 find 命令的配置),它使用内部最后更改的文件的 mtime 作为时间戳,但仍然在目录级别操作(即我们不想根据单个目录中的所有文件获得多次点击)?

最佳答案

我同意@shellter 的评论,即标志文件是最好的方法。这取决于您的用户是否同意上传该文件。

查找当前目录下最新的文件

find . -type f -printf "%T@ %p\n" | sort -nr | head -1

输出有 2 个字段:

  1. 自纪元以来的时间(以秒为单位),带小数微秒
  2. 文件的相对路径

关于shell - 基于包含的文件内容的目录的上次更改时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9832004/

相关文章:

linux - 如何在linux中捕获用户执行的命令

arrays - 获取 Bash 数组中的最后一个元素

visual-studio - 将整个目录复制到输出文件夹并保持文件夹结构?

c# - GetLastWriteTime 返回 12/31/1600 7 :00:00 PM

php - 如何替换 Netbeans 中的字符串?

linux - for 循环范围不工作 ksh

bash - 将 stderr 和 stdout 记录到日志文件并处理 bash 脚本中的错误

c# - 遍历目录中的子目录

linux - 删除文件中包含字符串的文件 - Linux cli

linux - 遇到 "find:/data/cdr/cdr-ivr.log: No such file or directory"后 Bash 脚本退出