所以,我需要Unix Executable files
在目录中搜索。我遍历目录并使用我正在搜索的文件的路径。我尝试的一些方法。
1.借助文件扩展名
Unix Executable file
没有文件扩展名,但有些文档文件也没有扩展名。所以,它对我来说失败了。
2. 借助 NSFileManager
NSDicitionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil];
它没有任何独特的属性来查找 Unix 可执行文件。
3. 借助 MDItemRef
它有一个被调用的属性,kMDItemContentType
但它给出了一些unix executable files
唯一的正确结果。
MDItemRef inspectedRef;
CFArrayRef inspectedRefAttributeNames;
CFDictionaryRef inspectedRefAttributeValues;
inspectedRef = MDItemCreate(kCFAllocatorDefault,(CFStringRef)filePath);
if(inspectedRef) {
inspectedRefAttributeNames = MDItemCopyAttributeNames(inspectedRef);
inspectedRefAttributeValues = MDItemCopyAttributes(inspectedRef,inspectedRefAttributeNames);
NSDictionary *attribDict = (__bridge NSDictionary*)inspectedRefAttributeValues;
if([[attribDict objectForKey:@"kMDItemContentType"] isEqualToString:@"public.unix-executable"])
NSLog(@"Unix Executable file");
}
4.借助unix命令“文件”
NSTask *unixTask = [[NSTask alloc] init];
[unixTask setStandardOutput:newPipe];
[unixTask setLaunchPath:@"/usr/bin/file"];
[unixTask setArguments:[NSArray arrayWithObject:filePath]];
[unixTask launch];
[unixTask waitUntilExit];
[unixTask terminationStatus];
while ((inData = [readHandle availableData]) && [inData length]) {
returnValue= [[NSString alloc] initWithData:inData encoding:[NSString defaultCStringEncoding]];
returnValue = [returnValue substringToIndex:[returnValue length]-1];
NSLog(@"%@",returnValue);
}
在这里,returnValue
我可以找到它是否是 unix 可执行文件。但这是非常缓慢的过程。所以,我的问题是如何以有效的方式搜索 unix 可执行文件?