2012-12-20 3 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"]; 

Итак, что мне здесь не хватает? Я также попытался удалить backslahes все вместе, но это дало мне ошибку «find: |: unknown primary or operator».

+0

Я думаю, что вы должны сделать один nstask для каждой команды вы используете, то труба их стандартно для следующего командного стандарта в. – JoshRagem

ответ

1

Спасибо за подсказки ребята. Я разделил его и получил больше ответа. При запуске команды без обратных косых черт & без сортировки & head Я получаю результаты.

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

Похоже, что NSTask не следует подавать '|' персонажи. Я просто сортирую и т. Д. В objc.

0

Вы на самом деле есть три программы командной строки, которые вы называете с

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

поиска, сортировки и головы.

Вы должны сделать nstask для каждой из команд theses - связать stdout поиска с сортировкой stdin, а затем сделать то же самое с сортировкой и головой.

Согласно the docs, вы должны иметь возможность устанавливать NSPipe как из одного, так и из другого, если это не сработает, вы можете просто вернуть результаты назад и передать их в следующий раз вручную.

Хотя я еще не подтвердил это, я не думаю, что вам нужны обратные следы, потому что это не проходит через ваш терминал, чтобы запускать эти программы.

0

Выяснил другой способ сделать это.

я теперь запустить команду NSTask/бен/ш с аргументами:

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

Кредиты на http://borkware.com/quickies/single?id=130

Смежные вопросы