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]测量)。
-
在131,766个文件上播放约400毫秒在9387文件上大约30ms。所以,每1000个文件约3毫秒。
-
使用find . -type f | wc -l计算
我只想到一个比前一个更好的解决方案,这也让我知道已删除的文件。
我们的想法是使用校验和,但不是所有文件的校验和;相反,我们只能对时间戳进行校验和。如果有任何改变(新文件,删除文件,修改过的文件),那么校验和也会改变!
find . -type f -printf '%T@,' | cksum
'%T@,'将每个文件的修改时间作为unix时间戳返回,全部在同一行。
cksum计算时间戳的校验和。
????
利润!!!!
它实际上比以前的解决方案更快(约20%),因为我们不需要排序(这是最慢的操作之一)。即使校验和也会快得多,特别是在如此少量的数据(每个时间戳22个字节)上,而不是对每个文件进行校验和。
-
备用校验和:md5sum,或SHA系列之一(shasum,sha1sum,sha512sum等)。 cksum在不担心安全性的情况下很好(不适用于我的用例),否则应该使用sha512sum。
$ find ./ -name"* .sqlite"-ls
在这里,您可以使用此命令获取文件的信息。使用过滤器获取时间戳
-
我需要跟踪任何文件的更改;我没有要使用-name跟踪的特定文件。我还需要了解新文件。
-
哦抱歉没有正确读取它但这更简单,因为你只需要grep特定目录中文件的时间戳并比较时间戳。您可以为以下步骤编写一个简单的shell脚本,这可能足以完成您的任务1.从目录中的所有文件中获取时间戳2.将其放在一个数组中并进行比较以获取最新的时间戳并获取相应的目录
-
我不需要所有文件的时间戳,但只需要最新的文件。"我需要的唯一输出是最后一次更改的时间戳,所以我可以将它与我在内存中存储的时间戳进行比较。"我发现接受的答案更容易实现这一目标。
-
是的,我得到你的意见。我说你可以为此目的编写shell脚本