我有一个使用以下命令检查目录的脚本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,这主要是关于查找具有最新时间戳/最大大小/等的文件,但包含一些相当复杂的解决方案。)