当至少有一个未排除的文件时, initifywait --exclude 不会触发

当至少有一个未排除的文件时, initifywait --exclude 不会触发

我正在使用此命令来观看目录:

inotifywait -r -e modify,create,delete --exclude ".*(\.(git|idea)|(.*(___jb_tmp___|___jb_old___)))" my-dir

但是,它并不像我预期的那样工作。我想要的是,只有排除每个已更改的文件时,它才不会触发。如果至少有一个文件未排除并发生更改,那么我希望 inotifywait“触发”。

我的总体计划是每当 python 文件或其他相关内容发生更改时,将代码推送到删除服务器。当仅更改 IDE (PyCharm) 中的元文件或 git 文件时,我不想推送代码。

有没有办法做到这一点?

现在,当我在 PyCharm 中更改 python 文件时,inotifywait 不会触发,因为有些文件已更改,结尾为_jb_tmp_。但是,如果我手动更改 python 文件,它就可以工作(例如在 nano 或 vim 中)。

答案1

正如我的问题的评论中所述,我发现问题不是由inotifywaitPyCharm 引起的,而是由 PyCharm 引起的。事实证明,PyCharm 有一个名为“安全写入”的选项,它告诉 IDE 首先将更改写入临时文件,如果成功,它会删除原始文件并将临时文件重命名为原始文件名。

这就是为什么inotifywait只看到这样的事件:

$ inotifywait -r -m -e modify,create,delete my-dir

my-dir/ CREATE main.py___jb_tmp___ 
my-dir/ MODIFY main.py___jb_tmp___ 
my-dir/ DELETE main.py___jb_old___ 
my-dir/.idea/ CREATE workspace.xml___jb_tmp___ 
my-dir/.idea/ MODIFY workspace.xml___jb_tmp___ 
my-dir/.idea/ DELETE workspace.xml___jb_old___ 
my-dir/.git/ CREATE index.lock 
my-dir/.git/ DELETE index.lock

因此,我在 PyCharm 中禁用了安全写入,现在使用以下命令:

inotifywait -r -e modify,create,delete --exclude ".*(\.git|\.idea)" my-dir

这正是我想要的。我看到的事件inotifywait是这样的:

my-dir/ 修改 main.py

相关内容