我正在处理一个进程,需要在对指定目录中的任何文件进行任何更改时重新启动。
我想避免使用任何沉重的东西,比如inotify
。 我不需要知道哪些文件已被更新,而只需要知道是否更新了文件。 而且,我不需要知道每一个变化,而只是知道在一个特定的时间间隔内是否发生了变化,这个变化是由过程dynamic决定的。
必须有一个相当简单的bash命令来做到这一点。 我不介意多次执行命令; 性能不是我最关心的这个用例。 但是,这个命令应该尽可能快。
我需要的唯一的输出是最后一次更改的时间戳,所以我可以将它与存储在内存中的时间戳进行比较。
我也开放更好的解决scheme。
其实我从另一个密切相关的问题中找到了一个很好的答案
我只修改了一下命令,以适应我的需求:
find . -type f -printf '%T@\n' | 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在这里你可以使用这个命令获取你的文件的信息。使用过滤器来获取时间戳