将文件扩展名转换为 UTI

Lri*_*Lri 6 bash macos

如何将文件扩展名字符串(如png)转换为统一类型标识符(如public.png)?

我正在寻找通用脚本或实用程序,而不是像mdls -name kMDItemContentTypeTree <file>.

NSG*_*God 5

最简单的方法是使用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 )。