나는 디렉토리를 감시하기 위해 이 명령을 사용하고 있습니다:
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에는 변경 사항을 임시 파일에 먼저 쓰도록 IDE에 지시하고, 성공하면 원본 파일을 삭제하고 임시 파일 이름을 원본 파일 이름으로 바꾸는 "Safe Write"라는 옵션이 있는 것으로 나타났습니다.
이것이 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 수정