2013-04-30 3 views
3

PC (Win7, NTFS)와 Mac (OS X, HFS +)간에 파일을 (양방향으로) 동기화하고 싶습니다. 나는 기존 도구/방법 (유니슨, SyncToy 또는 Samba 공유를 통해 작동하는 다른 소프트웨어)을 많이 사용했지만 아무도 내 파일에서 파일 생성 타임 스탬프 (이후 FCT라고 함)를 유지할 수는 없지만, 그것은 나에게 용납 될 수 없다. 그것은 주로 염두에 유닉스로 구축 되었기 때문에 OS X로 제공 SMB 공유에 액세스 할 때OS X에서 파일 타임 스탬프를 설정하는 API

윈도우 취득 (또는 설정) 할 수없는 FCTs을 (my Unison forum post 참조)

유니슨은 아마도 FCTs의 개념을 이해하지 못하는 그런 시나리오에서는 FCT 대신 파일 수정 시간을 표시하고 설정합니다 (Samba는 Windows가 아닌 Samba를 비난 함). 따라서 SyncToy과 같은 것을 사용할 수 없습니다.

그러나 OSX는 Windows에서 제공하는 SMB 공유로 작업 할 때 FCT를 가져오고 설정할 수 있습니다. 이것은 OS X에서 실행될 Python 프로그램을 작성하여 cp을 사용하여 로컬 파일과 SMB 공유간에 파일 동기화를 수행 할 수 있다고 생각한만큼 좋은 발견이었습니다. FCT가 cp -p 옵션으로 보존되지 않는다는 것을 알았을 때 이것은 아무런 의미가없는 것으로 판명되었습니다. Finder GUI를 통해 파일을 복사하는 동안에 만 FCT가 보존됩니다.

그래서 파일 동기화 유틸리티를 직접 작성하기로 결정했습니다. Python을 사용하기 때문에 PC와 Mac에서 각각 실행되며 ssh를 통해 통신합니다. 파이썬에는 FCT를 얻거나 설정할 수있는 확실한 방법이 없으므로 파이썬이이 목적을 위해 이야기 할 각 플랫폼에 대한 기본 헬퍼 응용 프로그램을 작성하기로 결정했습니다. (어느 쪽이든 C로 파이썬 모듈을 쓰거나, 더 복잡 할거라 생각합니다.)

그게 내가 데리고 온다. OS X에서 파일 타임 스탬프를 설정하는 API는 무엇인가?

내 파이썬 스크립트가 STDIN & STDOUT을 통해 통신 할 수있는 콘솔 응용 프로그램을 빌드하려고합니다. 기본적으로 나는 OS X의 GetFileTime의 등가물 및 찾고 있어요 SetFileTime

내가 경험이 목적 C.

답변

2

에있을 것 파일 속성을 변경하는 코코아 방법을 개발하지 가지고 내가 C에서 할 수있는 뭔가가 좋은 것 NSFileManager를 사용 :

NSError* error = nil; 
NSString* filePath = [@"~/Desktop/test.txt" stringByExpandingTildeInPath]; 
if(![[NSFileManager defaultManager] setAttributes:@{NSFileCreationDate : [NSDate date]} ofItemAtPath:filePath error:&error]) 
{ 
    NSLog(@"Setting file creation date attribute failed with error:%@", error); 
} 

당신은 재단 명령 행 유틸리티에서 위의 코드를 사용할 수 있습니다. 당신은 일반 C를 선호하는 경우

대신 POSIX 합계를 사용할 수 있습니다 https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man2/stat.2.html

+1

당신이 혹시 있나요 알고 ** ** 파일 생성 시간을 설정하는 일반 C 방법을? [here 's] (http://www.gsp.com/cgi-bin/man.cgi?section=2&topic=utimes) BSD에서 두 가지 utimes() 호출을 사용하는 것이 가능하다는 것을 알지만 [apple 버전] (https : //developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man2/utimes.2.html#//apple_ref/doc/man/2/utimes)에서는 그것에 대해 이야기하지 않습니다. – 0cd

+0

이 답변을 사용하여 작은 cmdline 유틸리티 [birthtime_touch] (https://github.com/herzbube/birthtime_touch)를 해킹했습니다. – herzbube

+0

@PuneetArora [This SO answer] (http://stackoverflow.com/a/38885787/1054378)에는 핵심 기반 함수'CFURLSetResourcePropertyForKey'를 사용하는 일반 C 솔루션이 있습니다. – herzbube

관련 문제