2012-05-27 4 views
1

나는 RSync 프로그램을 조금 설치하려고하는데, 아래의 코드로 작동하도록했다. 유일한 문제는 디렉터리가 아닌 단일 파일 만 Rsync한다는 것입니다. 터미널 명령을 통해 rsync을 실행하면 전체 디렉토리를 다른 디렉토리로 복사 할 수 있습니다. 누구든지 수정 사항을 알고 있습니까?RSYNC 디렉토리 대 파일

NSString *source = self.source.stringValue; 
NSString *destination = self.destination.stringValue; 

NSLog(@"The source is %@. The destination is %@.", source, destination); 

NSTask *task; 
task = [[NSTask alloc] init]; 
[task setLaunchPath:@"/usr/bin/rsync"]; 

NSArray *arguments; 
arguments = [NSArray arrayWithObjects: source, destination, nil]; 
[task setArguments: arguments]; 

NSPipe *pipe; 
pipe = [NSPipe pipe]; 
[task setStandardOutput: pipe]; 

NSFileHandle *file; 
file = [pipe fileHandleForReading]; 

[task launch]; 

NSData *data; 
data = [file readDataToEndOfFile]; 

문자열 값을 가져 와서 원본 및 대상과 동일한 값을 설정하는 원본 및 대상에 대한 두 개의 텍스트 필드가 있습니다.

답변

3

명령 줄에서 rsync를 호출하는 경우 설명하는 효과를 얻는 데 사용할 스위치가 있습니다. "-a"옵션 : 다른 여러 옵션에 대한 줄임말로 가장 관련성이 높은 옵션입니다 rsync가 소스 디렉토리에서 재발행하도록하는 명령.

이것은 "foo"디렉토리와 모든 내용을 재귀 적으로 "bar"디렉토리에 복사합니다. "bar"가 존재하지 않으면 rsync가이를 생성 한 다음 "foo"를 복사합니다.

rsync -a foo bar 

은 ... 당신이 당신의 소스 디렉토리에 후행 슬래시를 넣어 여부입니다 알아야 할 바/foo는/모든

다른 조그만 (하지만 중요!) 세부 사항이 발생할 것입니다. 대신 말했다 경우 :

rsync -a foo/ bar 

... 당신이/바/모든 것을 바람 싶지만, 어떤 디렉토리는 수신 측에 "foo는"호출되지.

당신은 "foo 디렉토리의 내용을 디렉토리 바 ...에 복사하지만, 둘러싸는 디렉토리 인 foo는 복사하지 말 것입니다."

죄송합니다 더 객관적인 C가 아니지만 잘하면 rsync를 사용하게 될 것입니다.

+0

완벽 하군요, 실제로 도움이되었습니다. 커맨드 라인에 대해서는 그다지 잘 모른다. 나는 어떤 이유로 명령 줄을 보내는 문자열이 아닌 인수 중 하나 인 "-a"를 넣어야 만했습니다. – crashprophet