使用 inotify 通知新文件

Posted

技术标签:

【中文标题】使用 inotify 通知新文件【英文标题】:Notify of new files with inotify 【发布时间】:2014-09-10 22:13:56 【问题描述】:

我需要编写一个脚本,在新文件进入目录时通知日志文件。我想将 inotify 用作 shell 脚本或 php,我发现的大多数示例都是用 C 语言编写的。有人可以举个例子吗?

另外,inotify 能否知道文件何时复制完成?

【问题讨论】:

请参阅:inotifywaitinotify 以了解可能触发的事件(文件的关闭/文件复制完成也是可捕获的)。 【参考方案1】:

每当在/path/to/dir 中创建文件时,此shell 命令将写入logfile

inotifywait -m -e create /path/to/dir >>logfile

解释:

-m 告诉 inotifywait 继续运行。默认是在第一个事件后退出

-e create 告诉 inotifywait 仅报告文件 create 事件。 (根据您想要完成的任务,您可能对 close 事件更感兴趣。)

/path/to/dir 是要监视的目标目录。除非指定了递归选项 -r,否则不会监视子目录。

>>logfile 告诉 shell 将所有输出重定向到文件 logfile。如果您关闭这部分,输出将被定向到标准输出,您可以在创建文件时实时查看。

监控更多事件

inotifywait 将报告几个不同的事件。例如,我在一个窗口中运行inotifywait,同时从另一个窗口写入文件:

$ inotifywait -m .
Setting up watches.
Watches established.
./ OPEN myfile
./ MODIFY myfile
./ MODIFY myfile
./ MODIFY myfile
./ CLOSE_WRITE,CLOSE myfile

因为上面没有重定向,所以所有的输出都出现在终端上。

OPEN 事件表示文件初始创建。 CLOSE 事件表明该过程已完成。

inotifywait 将向您显示的确切事件集取决于您正在监视的程序使用的系统调用。做一个类似上面的测试来找出答案。

【讨论】:

以上是关于使用 inotify 通知新文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 inotify 检查监视文件夹中的文件是不是被覆盖

如果Linux中USB设备中的文件系统有任何更改或如何递归使用inotify,如何获得通知

iNotify 收到事件后如何关闭文件句柄

Python:iNotify_Simple 从其他目录获取文件

使用 Inotify 检测复制操作

Inotify: 高效实时的Linux文件系统事件监控框架