2013-06-03 2 views
1

cf. OSX에서 FSEvents은 기본적으로 이벤트를 시작하기 전에 FS 이벤트를 1 초 (시간 초과 구성 가능) 이상으로 수집합니다.리눅스에서 inotifywait은 타임 아웃 기간 동안 이벤트 수집을 허용합니까?

이것은 일련의 파일 시스템 변경 사항을 단일 이벤트로 수집하여 (대기 시간을 초과하여 스크립트가 필요한 것 이상으로 실행되지 않음) 이점이 있습니다.

예를 들어 파일을 Vim에 저장하면 파일 자체 외에 버퍼 파일을 삭제하고 실행 취소 파일을 업데이트하며 4193이라는 테스트 파일을 만들고 지우는 경향이 있습니다. fswatch의 내 포크와 같은이 API를 사용하는 작은 도구를 사용하는 OSX에서는이 모든 것이 하나의 "일괄 처리 이벤트"로 축소 될 수 있지만 inotifywait -m을 사용하면 지정한 모든 이벤트가 별도의 줄로 스트림에 전달되어 단순하지 않게됩니다. 외부 처리없이 그룹화 할 수 있습니다.

저는 솔루션을 랩하고 처리하는 것이지만 FSEvents가 허용하는 시간 제한을 지정하는 숨겨진 기능이 있기를 바라고있었습니다.

답변

2

저는 실제로 이런 종류의 일이 inotify의 기능 범위에 있지 않아야한다고 생각하기 시작했습니다.

나는 적절한 해결책을 찾지 못했지만, 그것을 할 수있는 우아한 방법이있는 것처럼 보입니다. 여기에 내 출발점이있다. (아무 것도 보이지 않는다면, 1 초에 뭔가를 축적하고 싶다.)

현재 이것으로 몇 가지 테스트를하고있다. 다음은 꽤 잘 작동하는 테스트 스크립트입니다.

group=0 
(for val in {1..10}; do echo "$RANDOM/10000" | bc | xargs sleep; echo $val; done) | while true; do while read -t 1 line; do echo "read $group $line"; done; ((group++)); done 
+1

'inotify '는 설명하는 기능을 지원하지 않으므로 직접 응용 프로그램 계층에 구현해야합니다. – zeekvfu