我正在使用此命令来观看目录:
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
正如我的问题的评论中所述,我发现问题不是由inotifywait
PyCharm 引起的,而是由 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