我在 Ubuntu 18.4 系统上使用inotify
(通过 实现pyinotify
)来监视某些目录中的创建、修改和属性更改。
我使用这些监视标志:IN_CREATE、IN_MOVED_TO、IN_MOVED_FROM、IN_MODIFY 和 IN_ATTRIB
inotify
当我注意到文件发生这些更改之一时,我所做的一件事就是对文件执行 a 操作chmod
,有时甚至chown
执行 a 操作。例如,如果这些监视文件之一的修改日期发生更改(例如,通过touch
命令),或者如果文件的大小发生变化,我将对该文件执行 achmod
和可能的 a 。chown
但是,使用 IN_ATTRIB 监视标志时,chmod
和chown
标志会触发另一个 IN_ATTRIB 更改,这会导致我重新发出该命令,进而导致 IN_ATTRIB 一次又一次地注意到该文件,从而导致相同更改的循环。
我想避免这种情况。我知道我可以做到这一点的一种方法是在发出chmod
或之前检查权限和所有权chown
,并且仅在确实需要更改时才运行其中一个。但是,我想知道是否有一种方法inotify
(或pyinotify
) 可以导致观察程序中所做的更改被忽略。
我知道我可以暂时禁用观看该特定文件,但随后我必须在某个时候重新启用观看它,以防再次需要修改该文件。
chmod
除了在发出或之前检查权限和所有权之外chown
,还有其他方法可以完成我想要做的事情吗?
先感谢您。
答案1
鉴于我没有得到任何答复,并且考虑到进一步的调查没有产生有关如何inotify
忽略它对文件和目录所做的更改的信息,我现在假设没有办法做到这一点,因为缺乏编码逻辑我的监视例程实际上不会调用诸如chmod
和之类的东西,chown
除非属性或所有权当前实际上与预期值不同。
这需要我的代码中有很多额外的逻辑,但它也解决了问题。