【发布时间】:2014-09-10 22:13:56
【问题描述】:
我需要编写一个脚本,在新文件进入目录时通知日志文件。我想将 inotify 用作 shell 脚本或 PHP,我发现的大多数示例都是用 C 语言编写的。有人可以举个例子吗?
另外,inotify 能否知道文件何时复制完成?
【问题讨论】:
-
请参阅:
inotifywait和inotify以了解可能触发的事件(文件的关闭/文件复制完成也是可捕获的)。
我需要编写一个脚本,在新文件进入目录时通知日志文件。我想将 inotify 用作 shell 脚本或 PHP,我发现的大多数示例都是用 C 语言编写的。有人可以举个例子吗?
另外,inotify 能否知道文件何时复制完成?
【问题讨论】:
inotifywait 和inotify 以了解可能触发的事件(文件的关闭/文件复制完成也是可捕获的)。
每当在/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 将向您显示的确切事件集取决于您正在监视的程序使用的系统调用。做一个类似上面的测试来找出答案。
【讨论】: