파일 변경 사항이 있는지 폴더 OSX를 모니터 한 다음 bash 스크립트를 실행하십시오. [중복] 모니터링하는 효율적인 방법을 찾고

중복 가능성 :
OS X 및 Ubuntu에서 실시간으로 파일 시스템보기

OSX에서 로컬 디렉토리를 모니터링하는 효율적인 방법을 찾고 있는데 해당 디렉토리에서 파일이 변경된 경우 bash 스크립트를 실행하여 파일을 github에 커밋하십시오.

파일 변경을 위해 디렉토리를 모니터링 한 다음 bash 스크립트와 같은 동작을 트리거하는 권장 도구가 있습니까?



답변

저장소에서 fswatch 사용

fswatch . 'git commit -avm "snapshot at ${date}"'

이 간단한 예제는 이미 리포지토리에있는 파일의 변경 사항 만 포착합니다.


답변

한 가지 옵션은 launchd를 사용하는 것입니다. 이와 같은 속성 목록을로 저장하고 로그 아웃 한 후 다시 ~/Library/LaunchAgents/com.superuser.445907.plist로드하십시오 launchctl load ~/Library/LaunchAgents/com.superuser.445907.plist.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd>
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.superuser.445907</string>
    <key>Program</key>
    <string>/Users/username/script</string> <!-- ~/ doesn't work -->
    <key>WatchPaths</key>
    <array>
        <string>/Users/username/Folder/</string>
    </array>
    <key>ThrotteInterval</key>
    <integer>0</integer> <!-- run at most every 0 seconds, by default 10 -->
</dict>
</plist>

시작은 파일을 원자 적으로 저장하거나 파일을 저장할 때마다 삭제하고 다시 작성할 때만 변경 사항을 등록합니다. 대부분의 OS X 응용 프로그램은 기본적으로 원자 저장을 수행하지만 예를 들어 TextMate 및 vim은 자동 저장을 수행하지 않습니다. 감시 폴더의 하위 폴더 변경 사항이 감지되지 않습니다.

launchctl unload $path && launchctl load $path plist에 변경 사항을 적용합니다.

참조 man launchdman launchd.plist더 많은 정보를 얻을 수 있습니다.