2011-12-10 5 views
3

누구나 파일이 언제 수정되는지 정확히 추적하고 동기화 할 수있는 Dropbox 및 그의 Continuous Data Protection 메커니즘처럼 파일이 수정 될 때 메소드 (파이썬)를 실행하는 방법을 알고 있습니다.dropbox 에서처럼 파일의 변경 사항을 추적하는 방법은 무엇입니까?

물론 하드 디스크 전체가 아니라 지정된 디렉토리의 트랙 일 것입니다.

OBS : Windows 및 Linux OS의 경우. Mac은 플러스입니다.)

+0

누군가가 좋은 라이브러리에 포장하지 않는 한, 이것은 OS에 따라 다릅니다. 어떤 OS를 타겟팅하고 있습니까? Linux 박스 용 – Thomas

+0

그러나 그것이 창문에 어떻게있을 수 있는지를 아는 것도 좋을 것입니다. – Pabluez

답변

5

, pyinotify을 아마 당신이 원하는 것을 할 것입니다. 그러나 특히 inotify(7) manpage에 언급 된주의 사항을주의 : 이벤트 큐가 오버 플로우 수

참고. 이 경우 이벤트가 손실됩니다. 강력한 응용 프로그램은 정상적으로 이벤트가 손실 될 가능성을 처리해야합니다.

전체 하위 트리를 모니터링하고 해당 트리에 새 하위 디렉터리가 만들어지는 경우 새 하위 디렉터리에 대한 감시를 만들 때까지 하위 디렉터리에 새 파일이 이미 만들어져있을 수 있습니다. 따라서 시계를 추가 한 직후 서브 디렉토리의 내용을 스캔 할 수 있습니다.

+0

놀라운 모듈! 나는 리눅스에 사용해야한다고 생각한다. 그것은 내가 필요한 것을 분명히합니다. 최대한 빨리 시도해보고 싶습니다. 다른 의견을 말하는 – Pabluez

+0

은 내가 찾고있는 것입니다. Pyinotify는 커널 2.6.13 이후로 리눅스에서 파일 시스템을 추적 할 책임이있는 커널 "bult-in"inotify를 처리합니다. 글쎄, 고마워. – Pabluez

+1

inotify는 이벤트가 귀하의 코드에 도달한다는 보장을하지 않습니다. 재부팅, 서비스 재시작 및 이벤트가 손실 될 수있는 고부하 상황이 있습니다. 따라서 신뢰할 수있는 동기화/복제를 수행하려면 동기화 된 내용의 일종의 데이터베이스를 유지하고 모든 파일을 검사하여 변경 사항을 검사해야합니다. 아마 체크섬을 사용합니다. Inotify는 즉시 동기화를 얻을 수있는 좋은 기회가 될 수 있지만 스캔 루틴도 필요합니다. –

4

파이썬에 크로스 플랫폼 솔루션이 있는지 확실하지 않지만 Windows 기반 솔루션에만 관심이 있다면 directory change notifications을 조사해야합니다. Win32 API 함수를 호출하려면 pywin32을 살펴보십시오.

Linux의 경우 fschange, dnotifyinotify을 포함하여 많은 솔루션이있는 것 같습니다. 어떤 솔루션이 권장 솔루션인지 확실하지 않지만 inotify가 가장 완벽한 솔루션 인 것으로 보입니다.

모든 플랫폼에 이러한 기능이있는 것은 아닙니다. 특정 플랫폼에서 사용할 수없는 경우 디렉터리 내용을 주기적으로 확인하여 이러한 알림을 에뮬레이션해야합니다.

+0

좋은 답변입니다! 그리고 리눅스 OS에서 어떻게 될 수 있는지 알고 있습니까? – Pabluez

+0

나는 그 해결책을보고 최대한 빨리보고 할 것입니다. – Pabluez

+0

예, fschange는 이전의 inotify 인 dnotify입니다. Inotify는 2.6.13 이후로 커널의 일부입니다. 이것은 C에서 사용된다고 가정합니다. Python의 경우 Pyinotify라는 모듈이 있으며 일반적으로 "api"inotify를 처리하고 필요한 것을 제공합니다. (사용자 @ 토마스는이 정보를 제공했습니다). 그래서, 정확히 내가 뭘 찾고 있었는지,하지만 당신은 창문에 대한 정보를 제공하고 그것은 미래의 참조를 위해 매우 유용합니다. 고맙습니다. – Pabluez

0
+0

Rsync가 백업 전용이 아닌가요? 내가 백업하거나 아무것도 동기화하고 싶지 않아, 나는 파일을 추적하고 그 파일이 수정 될 때마다 내 방법을 실행하고 싶다. – Pabluez

+0

rsync는 두 개 이상의 위치에 동기화 된 데이터가 있는지 확인합니다.변경 사항을 추적하고 해당 델타 변경 사항 만 동기화하여이를 수행합니다. 그래서 모든 위치는 가능한 한 유사성에 가깝습니다. 그게 네가 필요로하는 것이 아닌가? –

+0

예, rsync의 일반적인 동작입니다. 내가 정말로 원하는 것은 경고를 생성하고 다른 작업 (로깅, 루트킷 확인 등)을 수행하기위한 수정 사항을 추적하는 것입니다. 그러나 파일의 복사본을 다른 곳에 보관하지 마십시오. 많은 플랫폼에서 실행되기 때문에 rsync가이 작업을 수행 할 수 있다면 좋을 것입니다. – Pabluez

관련 문제