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 コマンド「file」を使用して
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実行可能ファイルを検索する方法ですか?