我想通过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 (或任何其他方法)
你有什么想法吗?
发布于 2015-10-25 19:58:37
NSPredicate应该用于评估Objective-C对象(NSArrays、NSStrings等)。我会使用类似这样的东西:
[NSFileManager defaultManager] contentsOfDirectoryAtURL:[NSURL URLWithString:@"/User/"] includingPropertiesForKeys:@[] options:NSDirectoryEnumerationSkipsHiddenFiles error:nil]要获取一个数组,请将/User/中的所有文件。
然后使用带有NSPredicate的NSArray的filteredArrayUsingPredicate:(与您的略有不同,但类似于SELF.pathExtension == %@)。
您将得到一个与您的谓词匹配的NSURL数组。您只需将它们转换为路径并将您的/Tweak/文件夹添加到数组中。将其用作任务的参数。
当然,如果你只是想移动一些文件,你不需要使用NSTask。NSFileManager具有将NSURL数组从一个目录移动到另一个目录的方法。
https://stackoverflow.com/questions/33328816
复制相似问题