如何使用NSTask和NSPredicate?

时间:2015-10-25 10:49:04

标签: objective-c nspredicate nstask

我想通过NSTask运行此命令:mv /User/xxx.deb / User / Docs将deb文件移动到/ User / Docs。但是,deb文件可以有很多名称:blah.deb,blah3.deb,hgfdo.deb,6745sdjiz.deb,...

这是我目前的代码:

#import <Foundation/NSTask.h>

NSString *myString = @"deb";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"entity.name CONTAINS %@", myString];
NSTask *task = [[[NSTask alloc] init] autorelease];
[task setLaunchPath:@"/bin/mv"];
[task setArguments:[NSArray arrayWithObjects:[NSString stringWithFormat:@"/User/%@", predicate], @"/User/Tweak/", nil]];
[task launch];

这不起作用。没有NSPredicate,它可以工作:

[task setArguments:[NSArray arrayWithObjects:@"/User/com.deb", @"/User/Tweak/", nil]];

但我需要使用NSPredicate(或任何其他方法)

你有什么想法吗?

1 个答案:

答案 0 :(得分:1)

NSPredicate应该用于评估Objective-C对象(NSArrays,NSStrings等)。 我使用的东西是:

[NSFileManager defaultManager] contentsOfDirectoryAtURL:[NSURL URLWithString:@"/User/"] includingPropertiesForKeys:@[] options:NSDirectoryEnumerationSkipsHiddenFiles error:nil]

获取/User/中所有文件的数组。

然后使用NSArray的filteredArrayUsingPredicate:使用NSPredicate(与SELF.pathExtension == %@之类的东西略有不同)。

您将获得与谓词匹配的NSURL数组。您只需将它们转换为路径并将/Tweak/文件夹添加到数组中。你用哪个作为任务的论据。

当然,如果您只是想移动某些文件,则不需要使用NSTask。 NSFileManager具有将NSURL数组从一个目录移动到另一个目录的方法。