我需要制作一个脚本,在新文件进入目录时通知日志文件。我想使用inotify作为shell脚本或PHP,我发现的大多数例子都在C中。有人能给我一个例子吗?
此外,inotify能知道文件何时完成复制吗?
每当在/path/to/dir
:中创建文件时,此shell命令都会写入logfile
inotifywait -m -e create /path/to/dir >>logfile
说明:
-m
告诉inotifywait继续运行。默认情况是在第一个事件之后退出-e create
告诉inotifywait只报告文件创建事件。(根据您想要完成的任务,您可能对关闭事件更感兴趣。)/path/to/dir
是要监视的目标目录。除非指定了递归选项-r
,否则不会监视子目录。>>logfile
告诉shell将所有输出重定向到文件logfile
。如果不考虑这一部分,输出将被定向到stdout,并且您可以实时观察文件的创建过程。
监视更多事件
inotifywait
将报道几个不同的事件。例如,我在一个窗口中运行inotifywait
,同时从另一个窗口写入文件:
$ inotifywait -m .
Setting up watches.
Watches established.
./ OPEN myfile
./ MODIFY myfile
./ MODIFY myfile
./ MODIFY myfile
./ CLOSE_WRITE,CLOSE myfile
由于以上内容没有重定向,所有输出都显示在终端上。
OPEN事件表示文件的初始创建。CLOSE事件表示进程已完成。
inotifywait
将向您显示的确切事件集取决于您正在监视的程序所使用的系统调用。做一个类似上面的测试来找出答案。