确定自上次以来目录内容是否已更改的最快方法

确定自上次以来目录内容是否已更改的最快方法

我有一个使用以下命令检查目录的脚本mdls*(按添加时间排序)并且它们执行一些操作。但是,mdls它有点慢,所以我想仅在绝对必要时(即目录内容已更改时)运行它。

我的想法是运行mdls一次并缓存结果,然后执行一些操作来跟踪目录的状态。在后续运行中,我将再次运行检查操作并将结果与​​我的结果进行比较。如果不同,则重新运行mdls;如果没有,则使用缓存。

我正在考虑du '/dir/path' | tail -1(如果目录大小​​保持等于字节,则内容可能没有改变)或ls '/dir/path' | md5'.

我目前更倾向于该md5解决方案,因为它对文件重命名具有弹性。然而,这两种解决方案都很糟糕,我想知道是否有更有效的方法(仍然很快)。

如果有帮助的话,最终该解决方案将在 ruby​​ 脚本中使用。


*我不会将此发布到提出不同的要求因为mdls不是重点。它可以是任何其他缓慢的命令。

答案1

如果检查新的/删除的文件就足够了(并忽略对现存的mtime文件),您可以使用目录本身的时间戳。

您可以通过 获取它stat。这里的输出以 1970 年初以来的秒数为单位:

$ stat -f %m "$dir"      # stat on OS X
1512493220
$ stat -c %Y "$dir"      # GNU coreutils stat
1512493801
$ stat -c %.9Y "$dir"    # nanoseconds too
1512493801.802870731

如果您想检查对文件的修改,您可以检查所有时间戳,并使用以下命令获取最大的时间戳sort

$ stat -f %m "$dir"/* | sort -n | tail -1
1512428453

(这接近于Bash常见问题解答 003,这主要是关于查找具有最新时间戳/最大大小/等的文件,但包含一些相当复杂的解决方案。)

相关内容