2012-12-20 109 views
0

我想在目錄樹中獲取最新的修改日期。 這工作正常,在終端:在NSTask參數中轉義反斜槓?

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

但是當我嘗試這與NSTask我得到

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

在args數組爲此我使用NSTask,我躲過了反斜線:

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

那麼,我在這裏錯過了什麼?我也試圖一起去除後擋板,但是這給了我一個「find:|:unknown primary or operator」錯誤。

+0

我想你應該做一個nstask每個命令的您正在使用,然後通過管道的標準中的下一個命令標準。 – JoshRagem

回答

1

感謝提示球員。我已經把它分開了,現在得到更多的迴應。當運行沒有反斜槓的命令&沒有排序&頭我確實得到了結果。

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

所以它看起來像NSTask不應該喂'''字符。 我只是在objc中排序等。

0

實際上,你有三個,你有

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

查找,分類和頭調用命令行程序。

您應該爲每個命令創建一個nstask - 將find的stdout鏈接到sort的stdin,然後對排序和頭執行相同的操作。

根據the docs,你應該能夠設置一個NSPipe作爲一個和另一個,如果這不起作用,你可以將結果返回並手動傳遞給下一個。

雖然我沒有驗證它,但我不認爲你需要反斜槓轉義,因爲這不會通過您的終端啓動這些程序。

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