如何将文件扩展名字符串(如png
)转换为统一类型标识符(如public.png
)?
我正在寻找通用脚本或实用程序,而不是像mdls -name kMDItemContentTypeTree <file>
.
最简单的方法是使用UTTypeCreatePreferredIdentifierForTag()
:
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSArray *args = [[NSProcessInfo processInfo] arguments];
if ([args count] < 2) {
printf("usage:\n");
printf("uti <filenameExtension>\n");
exit(EXIT_SUCCESS);
}
NSArray *extensions = [args
subarrayWithRange:NSMakeRange(1, [args count] - 1)];
for (NSString *filenameExtension in extensions) {
NSString *utiType = (NSString *)UTTypeCreatePreferredIdentifierForTag(
kUTTagClassFilenameExtension,
(CFStringRef)filenameExtension, NULL);
printf("%s\n", [utiType UTF8String]);
[(NSString *)utiType release];
}
[pool drain];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译后的uti
可执行文件和源代码:uti.zip
用法:
MacPro:~ mdouma46$ /Users/mdouma46/Developer/uti/uti png tga mov sdfad
public.png
com.truevision.tga-image
com.apple.quicktime-movie
dyn.age81g3dgqfwa
Run Code Online (Sandbox Code Playgroud)
(“未知”文件扩展名映射到以dyn.
前缀开头的 UTI )。