use*_*369 5 osx directory ruby
我有一个脚本,使用 * 检查目录mdls
(按添加时间排序),并执行一些操作。然而,mdls
它有点慢,所以我\xe2\x80\x99d 喜欢仅在绝对必要时(即目录内容已更改时)才运行它。
我的想法是运行mdls
一次并缓存结果,然后执行一些操作来跟踪目录的状态。在后续运行中,我\xe2\x80\x99d 再次运行检查操作并将结果与我的结果进行比较。如果不同,则重新运行mdls
;如果没有,则使用缓存。
我\xe2\x80\x99m 考虑其中一个du \'/dir/path\' | tail -1
(如果目录大小保持等于字节,则\xe2\x80\x99s 可能内容没有\xe2\x80\x99t 更改)或ls \'/dir/path\' | md5\'
.
我目前更倾向于该md5
解决方案,因为它对文件重命名具有弹性。然而,这两种解决方案都很hacky,我想知道是否有\xe2\x80\x99s更有效的东西(仍然很快)。
如果有帮助的话,最终该解决方案将在 ruby 脚本中使用。
\n\n* I\xe2\x80\x99m 没有将其发布到Ask Different,因为mdls
这不是重点。它可以是任何其他缓慢的命令。
如果足以检查新的/已删除的文件(并忽略对现有mtime
文件的修改),您可以使用目录本身的时间戳。
您可以通过 获取它stat
。这里的输出以 1970 年初以来的秒数为单位:
$ stat -f %m "$dir" # stat on OS X\n1512493220\n$ stat -c %Y "$dir" # GNU coreutils stat\n1512493801\n$ stat -c %.9Y "$dir" # nanoseconds too\n1512493801.802870731\n
Run Code Online (Sandbox Code Playgroud)\n\n如果您想检查对文件的修改,您可以检查所有时间戳,并使用以下命令获取最大的时间戳sort
:
$\xc2\xa0stat -f %m "$dir"/* | sort -n | tail -1\n1512428453\n
Run Code Online (Sandbox Code Playgroud)\n\n(这接近BashFAQ 003,它主要是关于查找具有最新时间戳/最大大小/等的文件,但包含一些相当复杂的解决方案。)
\n