2010-07-27 2 views
1

jnotify를 사용하여 변경 사항을 확인하는 디렉토리 동기화 프로그램에서 작업 중입니다.여러 파일을 처리 할 때 inotify 대기를 만드는 방법

jnotify가 변경을 감지하면 동기화가 수행됩니다. 문제는 많은 파일이 디렉토리에 복사되거나 수정 될 때 하나의 큰 동기화 대신 많은 동기화가 수행된다는 것입니다. 당신이 디렉토리 A를 100 개 큰 파일을 복사 할 수 있다면 모든 파일을 완전히 디렉토리 A.에 복사 될 때까지

이상적으로, 디렉토리 B에 동기화가 발생하지 것이다

어떻게 든 임시 디렉토리를 (사용에 대한 생각 A1) 파일이 완전히 복사 될 때까지 파일을 보관 한 다음 A1로 옮깁니다. 그러나이 솔루션은 파일 델타 만 보내는 동기화를 수행하기 위해 조화를 사용하고 있기 때문에 제대로 작동하지 않습니다. 이는 내가 사용하고 싶지 않고 회피하지 않는 기능입니다.

아마도 i/jnotify를 사용하여 여러 파일이 동시에 업데이트되는 것을 감지하는 방법이 있을까요?

답변

1

다음은 제안 사항입니다. 응용 프로그램에 세트를 설정하고 "수정 된"파일을 수집하도록 설정하면 해당 파일을 세트에 추가하고 파일 수가 특정 숫자 (예 : 100)를 초과하면 동기화를 수행합니다 . 합리적인 반응을 원한다면 타이머를 설정하는 것도 좋은 생각입니다. 예를 들어 새로운 변경 사항이없는 경우/X 시간대에 세트에 추가되는 것과 같이 진행하고 동기화를 수행 할 수도 있습니다. .

+0

응답 해 주셔서 감사합니다. 지금까지, 나는 더 나은 해결책을 찾을 수있을 때까지 다음과 같이 동작 할 것이라고 생각하고있다 ... 액션 (즉, CREATE)이 발생할 때마다 리스너 스레드는 다른 액션이 감지되는지 1 초 동안 기다려야한다. 조치가 감지되지 않으면 동기화를 수행하십시오. 그런 다음 동기화가 시작되면 현재 동기화가 완료 될 때까지 동기화를 연기합니다. 파일을 동기화해야한다면 첫 번째 동기화 후에 다른 동기화를 수행하십시오. 이렇게하면 작은 파일 그룹의 일괄 처리로 동기화가 강제됩니다. 또는 한 번에 하나의 큰 파일을 동기화합니다. 어떤 종류의 합리적인 것 같습니다. – Jono

+0

@Jono - 합리적인 것처럼 보였습니다. 개인적으로 조금 더 오래 지연 될 것이지만, 일반적인 생각은 합리적인 것처럼 보입니다. 구현하는 데는 약간의 노력이 필요하지만, 실행 가능해야합니다. 파일 변경 사항을 어떻게 처리 할 예정입니까? (직접 복사 또는 rsync와 같은 것) – Pharaun

+0

파일의 변경 내용을 처리한다는 것이 확실하지 않습니다. 나는 전체 디렉토리에서 inotify를 사용하여 그 안에있는 변경 사항을 검사 할 것이다. – Jono