gpt4 book ai didi

cocoa - 在 rsync NSTask 方法中包装排除选项

转载 作者:行者123 更新时间:2023-12-03 16:33:49 24 4
gpt4 key购买 nike

我正在尝试将 rsync 包装在 NSTask 中并使用排除选项来不同步隐藏文件(点文件)。我知道这在命令行上有效:

rsync -az --exclude='.*' source destination

我的 NSTask 定义如下:

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

NSArray *arguments;
arguments = [NSArray arrayWithObjects: @"-az", @"--exclude='.*'", source, destination, nil];
[rsyncTask setArguments: arguments];

没有排除参数,一切正常。事实上,上述定义可以正常工作,但隐藏文件仍然会被复制。

我已经尝试过:

  • 用反斜杠转义单个刻度
  • 使用转义双引号
  • 使用两个反斜杠来转义转义反斜杠
  • 不使用 --exclude= 而只是使用 --exclude 和一个单独的数组元素 @"'.*'"

似乎没有什么能得到我想要的结果。

欢迎任何建议。

最佳答案

对于任何遇到此问题寻找如何排除多个文件的人,事实证明您需要为每个要排除的文件/目录单独的 --exclude 。在命令行上, --exclude={file1,dir1/dir2,file2,dir1/dir\with\space} 模式可以工作,但该格式与 NSTask 配合不佳。对于 NSTask (swift) 这将是:

task.arguments = ["-FLAGS", "--exclude", "file1", "--exclude", "dir1/dir2", "--exclude", "file2", "--exclude", "dir1/dir with spaces", "SRC", "DST"]

另请注意,NSTask 不要求对空格进行转义。来自 docs ,“NSTask 对象将路径和参数中的字符串转换为适当的 C 样式字符串(使用 fileSystemRepresentation),然后通过 argv[] 将它们传递给任务)。参数中的字符串不会进行 shell 扩展,因此您不需要进行特殊引用,并且 shell 变量(例如 $PWD)不会被解析。”

关于cocoa - 在 rsync NSTask 方法中包装排除选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4685556/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com