如何监视网络映射驱动器上的文件更改?
How to monitor file changes on network mapped drives?
据我所知,网络映射驱动器显示为 /Volumes 文件夹的子文件夹。
从此文件夹获取文件更改更新 (delete/create/update) 的正确方法是什么?
/dev/fsevents 可以吗?
Finder 如何知道更改?
您可以使用 fswatch
,我发现通过 homebrew
安装最简单。而且,是的,它确实使用了 FSEvents。然后你就这样做:
fswatch /Volumes/MUSIC
其中 MUSIC
是我网络上基于 Samba 的音乐服务器。
这是它的实际效果...首先我在顶部 window 显示已安装的卷(并且 MUSIC 是基于 Samba 的),然后我在左下角开始 fswatch
window,然后我在顶部 window 的文件系统中进行修改,您可以在 Finder 中看到它们发生,还可以在左下方 window 看到 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 {} 会将命令中出现的 {} 替换为已解析的参数。如果
你是运行的命令不需要事件路径名,把这个选项删掉即可。
如果您更喜欢使用其他替换字符串,请将 {} 替换为您的字符串。
你是对的,OS X 在 /Volumes 中安装网络驱动器
获取文件更改更新的方法是使用File System Events API。它是基于 C 的 API,您可以在其中监视特定目录(甚至 /
)中的所有更改。
您将使用 FSEventStreamCreate
and starting it with FSEventStreamScheduleWithRunLoop
创建流
准备好深入研究头文件,因为在参考文档中有更多文档
据我所知,Finder 可能使用了一些内部 API 或 kernel queues,它们的设置比 FSEvents.h 的更高级别 API 更复杂
有一个很好的 GUI 可以帮助您了解整个事件是如何发生的。它叫做 fseventer by fernlightning(尚未 Yosemite 准备好)
据我所知,网络映射驱动器显示为 /Volumes 文件夹的子文件夹。
从此文件夹获取文件更改更新 (delete/create/update) 的正确方法是什么?
/dev/fsevents 可以吗?
Finder 如何知道更改?
您可以使用 fswatch
,我发现通过 homebrew
安装最简单。而且,是的,它确实使用了 FSEvents。然后你就这样做:
fswatch /Volumes/MUSIC
其中 MUSIC
是我网络上基于 Samba 的音乐服务器。
这是它的实际效果...首先我在顶部 window 显示已安装的卷(并且 MUSIC 是基于 Samba 的),然后我在左下角开始 fswatch
window,然后我在顶部 window 的文件系统中进行修改,您可以在 Finder 中看到它们发生,还可以在左下方 window 看到 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 {} 会将命令中出现的 {} 替换为已解析的参数。如果 你是运行的命令不需要事件路径名,把这个选项删掉即可。 如果您更喜欢使用其他替换字符串,请将 {} 替换为您的字符串。
你是对的,OS X 在 /Volumes 中安装网络驱动器
获取文件更改更新的方法是使用File System Events API。它是基于 C 的 API,您可以在其中监视特定目录(甚至 /
)中的所有更改。
您将使用 FSEventStreamCreate
and starting it with FSEventStreamScheduleWithRunLoop
准备好深入研究头文件,因为在参考文档中有更多文档
据我所知,Finder 可能使用了一些内部 API 或 kernel queues,它们的设置比 FSEvents.h 的更高级别 API 更复杂
有一个很好的 GUI 可以帮助您了解整个事件是如何发生的。它叫做 fseventer by fernlightning(尚未 Yosemite 准备好)