如何监控网络映射驱动器上的文件更改?

时间:2015-04-08 22:04:50

标签: macos networking fsevents

从我看到的情况来看,网络映射驱动器显示为/ Volumes文件夹的子文件夹。

从此文件夹获取文件更改更新(删除/创建/更新)的正确方法是什么?

/ dev / fsevents会为此工作吗?

Finder如何了解这些变化?

2 个答案:

答案 0 :(得分:3)

您可以使用fswatch,我觉得最容易通过homebrew进行安装。并且,是的,它确实使用FSEvents。然后你就做了:

fswatch /Volumes/MUSIC

其中MUSIC是我网络上基于Samba的音乐服务器。

以下是它在行动中的表现...首先我在顶部窗口中显示已安装的卷(并且MUSIC是基于Samba的),然后我在左下窗口中启动fswatch,然后我进行修改在顶部窗口的文件系统中,您可以在Finder中看到它们,并在左下方窗口中看到fswatch跟踪所有事件。

enter image description here

您也可以在检测到事件时使用它与其他程序进行交互,如下所示(从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(尚未准备约塞米蒂)