1

私はそれの地獄のために小さなRSyncプログラムをまとめようとしています、そして私はそれを以下のコードで動作させることができました。唯一の問題は、ディレクトリではなく、単一のファイルのみをRsyncすることです。terminalコマンドを実行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];

ソースとデスティネーションに2つのテキストフィールドがあり、文字列値を取得して、ソースとデスティネーションに等しく設定します。

4

1 に答える 1

3

コマンドラインでrsyncを呼び出している場合は、説明している効果を得るために使用するスイッチがあります。「-a」オプション:他のいくつかのオプションの省略形です。ここで最も関連性の高いものはrsyncの命令です。ソースディレクトリから再帰します。

これにより、ディレクトリ「foo」とそのすべての内容がディレクトリ「bar」に再帰的にコピーされます。「bar」が存在しなかった場合、rsyncはそれを作成し、「foo」をその中にコピーします。

rsync -a foo bar

...結果はbar/foo/everythingになります

注意すべき他の小さな(しかし重要な!)詳細は、ソースディレクトリの末尾にスラッシュを付けるかどうかです。代わりに言った場合:

rsync -a foo/ bar

...最終的には/bar/ everythingになりますが、受信側に「foo」というディレクトリはありません。

「ディレクトリfooの内容をディレクトリバーにコピーしますが、それを囲むディレクトリfooはコピーしません」と言うことになります。

申し訳ありませんが、これはより客観的ではありません-C固有ですが、うまくいけば、rsyncを使用できるようになります。

于 2012-05-28T00:27:35.327 に答える