使用 inotify 通知新文件
Posted
技术标签:
【中文标题】使用 inotify 通知新文件【英文标题】:Notify of new files with inotify 【发布时间】:2014-09-10 22:13:56 【问题描述】:我需要编写一个脚本,在新文件进入目录时通知日志文件。我想将 inotify 用作 shell 脚本或 php,我发现的大多数示例都是用 C 语言编写的。有人可以举个例子吗?
另外,inotify 能否知道文件何时复制完成?
【问题讨论】:
请参阅:inotifywait
和inotify
以了解可能触发的事件(文件的关闭/文件复制完成也是可捕获的)。
【参考方案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 通知新文件的主要内容,如果未能解决你的问题,请参考以下文章
如果Linux中USB设备中的文件系统有任何更改或如何递归使用inotify,如何获得通知