从我看到的情况来看,网络映射驱动器显示为/ Volumes文件夹的子文件夹。
从此文件夹获取文件更改更新(删除/创建/更新)的正确方法是什么?
/ dev / fsevents会为此工作吗?
Finder如何了解这些变化?
答案 0 :(得分:3)
您可以使用fswatch
,我觉得最容易通过homebrew
进行安装。并且,是的,它确实使用FSEvents。然后你就做了:
fswatch /Volumes/MUSIC
其中MUSIC
是我网络上基于Samba的音乐服务器。
以下是它在行动中的表现...首先我在顶部窗口中显示已安装的卷(并且MUSIC是基于Samba的),然后我在左下窗口中启动fswatch
,然后我进行修改在顶部窗口的文件系统中,您可以在Finder中看到它们,并在左下方窗口中看到fswatch
跟踪所有事件。
您也可以在检测到事件时使用它与其他程序进行交互,如下所示(从fswatch
联机帮助页中提取):
将fswatch
传递给另一个程序以响应事件的最简单方法可能是
使用xargs:
$ fswatch -0 [opts] [paths] | xargs -0 -n 1 -I {} [command]
fswatch -0将使用NUL字符分割记录。
xargs -0将使用NUL字符拆分记录。这是正确匹配所必需的 用fswatch阻抗。
xargs -n 1将调用每条记录的命令。如果你想要每x个记录,那么 使用xargs -n x。
xargs -I {}将使用已解析的参数替换命令中{}的出现次数。如果 您正在运行的命令不需要事件路径名,只需删除此选项即可。 如果您更喜欢使用其他替换字符串,请将{}替换为您的。
答案 1 :(得分:3)
你是对的,OS X在/ Volumes
中安装网络驱动器获取文件更改更新的方法是使用File System Events API。它是一个基于C的API,您可以在其中查看特定目录(甚至/
)中的所有更改。
您可以使用FSEventStreamCreate
创建流,然后使用FSEventStreamScheduleWithRunLoop
准备好深入了解头文件,因为有更多文档,如参考文档
据我所知,Finder可能使用一些内部API或kernel queues,它们比FSEvents.h的更高级API更复杂。
有一个很好的图形用户界面可以帮助您了解整个事件是如何进入的。它被称为fseventer by fernlightning(尚未准备约塞米蒂)