fswatch는 파일시스템의 이벤트를 감시하고 추적하는 모니터다.
모니터는 지속적으로 변화를 감지하고 특정 작업을 수행하는 도구를 의미한다.
fswatch는 여러 시스템에서 사용 가능하고 여기에서 확인할 수 있다.

나는 MacOS를 사용해서 이를 기준으로 설명한다.

설치

MacOS를 사용하고 있다면 [[/tool/homebrew]]{homebrew}로 쉽게 설치할 수 있다.

$ brew install fswatch

Usage

fswatch는 path 경로의 이벤트를 일정 간격으로 추적한다.

$ fswatch path

/Users/.../new

간격 조정

간격을 조정하려면 -l옵션을 사용한다.

$ fswatch -l 5 path // 5sec

이벤트 필터

원하는 이벤트만 필터링 하려면 --event 옵션 뒤에 키워드를 적으면 된다.

$ fswatch --event Created --event Updated --event Removed path

이벤트 출력

이벤트 플래그를 출력하려면 -x, --event-flags 옵션을 사용한다.

$ fswatch -x path

/Users/.../aaa Created IsFile AttributeModified
/Users/.../abc Created IsFile AttributeModified

필요하다면 [[/tool/awk]]{awk}나 [[/tool/sed]]{sed}를 조합해 사용해보자.

명령어 조합

파일시스템의 변화를 추적하는 건 제각기 다른 목적을 가지고 있지만 보통 추적 이후 일련의 과정을 수행하기 위함이다.
이 때 fswatch와 파이프, [[/tool/xargs]]{xargs}를 조합해 목적을 달성할 수 있다.

이벤트마다

아래 스크립트에서 echo 대신 원하는 명령어를 넣어 사용한다.
-0 옵션은 결과를 NUL 문자로 분리한다.

$ fswatch -0 test | xargs -0 -n 1 -I {} echo "changed > {}"

changed > Users/.../1
changed > Users/.../2
changed > Users/.../3

이벤트마다 한 번만

변화가 생겼을 때 한 번만 작업을 수행해야 한다면 -o, --one-event 옵션을 사용한다.

$ fswatch -o test | xargs -n 1 -I {} echo "changed > {}"

changed > 3