在NSTask参数中转义反斜杠?

时间:2012-12-20 16:31:15

标签: escaping nstask

我正在尝试在目录树中获取最新的修改日期。 这在终端中工作正常:

find . ! -path "*.git*" -exec stat -f "%m" \{} \; | sort -n -r | head -1

但是当我用NSTask尝试这个时,我得到了

find: -exec: no terminating ";" or "+"

在我正在使用的NSTask的args数组中,我转义了反斜杠:

NSArray *args = @[@".", 
                  @"!", 
                  @"-path", 
                  @"*.git*", 
                  @"-exec", 
                  @"stat", 
                  @"-f", 
                  @"%m", 
                  @"\\{}", 
                  @"\\;", 
                  @"|", 
                  @"sort", 
                  @"-n", 
                  @"-r", 
                  @"|", 
                  @"head", 
                  @"-1"];

那么,我在这里错过了什么?我也试图一起删除后退,但这给了我一个“发现:|:未知的主要或操作符”错误。

3 个答案:

答案 0 :(得分:1)

感谢提示家伙。我已将它拆分并立即获得更多响应。运行没有反斜杠的命令时没有那种&我确实得到了结果。

NSArray *args = @[@".", 
              @"!", 
              @"-path", 
              @"*.git*", 
              @"-exec", 
              @"stat", 
              @"-f", 
              @"%m", 
              @"{}", 
              @";"];

所以看起来不应该给NSTask喂食'|'字符。 我只是在objc中进行排序等。

答案 1 :(得分:0)

您实际上有三个命令行程序,可以使用

调用
find . ! -path "*.git*" -exec stat -f "%m" \{} \; | sort -n -r | head -1
找到,排序和领导。

你应该为每个命令创建一个nstask - 将find的stdout链接到sort的stdin,然后对sort和head执行相同的操作。

根据the docs,您应该能够将NSPipe设置为一个NSPipe而另一个设置为另一个,如果这不起作用,您可以将结果拉回来并手动将它们传递给下一个

虽然我没有验证它,但我认为您不需要反斜杠转义,因为这不会通过您的终端启动这些程序。

答案 2 :(得分:0)

想出了另一种方法。

我现在使用参数运行NSTask命令/ bin / sh:

NSArray *args = @[@"-c", 
                  @"/usr/bin/find . ! -path \"*.git*\" -exec stat -f %%m \\{} \\; | sort -n -r | head -1"];

http://borkware.com/quickies/single?id=130

的信用