1

В Mac OS X, когда вы дважды щелкнете по имени файла, этот файл откроется в приложении, которое его создало. Поэтому где-то в описании файла в файле Mac OS X должна храниться информация о том, какое приложение создало этот файл. Обратите внимание, что это не расширение файла, файл может иметь любое расширение или вообще не иметь расширения.

Два вопроса относительно этой информации:

(1) Как я могу найти все файлы, которые откроет определенное приложение?

(2) Как я могу увидеть и изменить приложение, которое откроет определенный файл?

2 ответа2

2

Приложение, с которым будет открыт файл, идентифицируется по типу элемента. Например, "Простой текстовый документ" откроется с помощью TextMate, а "Текстовый документ TextWrangler" откроется с помощью TextWrangler. Сами приложения отвечают за предоставление этих типов элементов, и они присваиваются файлам, что позволит OS X выбрать приложение для открытия их.

Вы можете проверить эту информацию для отдельных файлов с помощью mdls:

mdls -name kMDItemKind -raw some-file.txt

Таким образом, для поиска всех файлов, которые будут открываться с TextMate, ищите их с этим конкретным видом элемента:

mdfind 'kMDItemKind == "Plain text document"'

Вы также можете ограничить этот поиск определенной папкой:

mdfind -onlyin /some/folder 'kMDItemKind == "Plain text document"'

Теперь, как вы узнаете эти строки "Item Kind", которые предоставляют приложения?

Перейдите к нужному файлу приложения и щелкните его правой кнопкой мыши. Выберите Показать содержимое пакета… и перейдите к Содержанию / Ресурсам. Откройте Info.plist.

Здесь вы найдете типы документов, которые может обрабатывать приложение, включая их Имя типа документа, которое именно то, что вы можете искать с помощью mdfind .


Как я могу увидеть и изменить приложение, которое откроет определенный файл?

Выберите файл, щелкните его правой кнопкой мыши и выберите « Информация». Измените приложение, указанное в разделе Открыть с помощью:

Еще одно полезное приложение для поддержки приложений и ассоциаций по умолчанию - RCDefaultApp.

2

Если вы изменяете ассоциацию программы для одного файла, она сохраняется в расширенном атрибуте с именем com.apple.ResourceFork (AFAICT, всегда со смещением 0x108) и доступен из командной строки с помощью xattr .

Расширенные атрибуты файлов могут быть перечислены с помощью ls -l@ в командной строке:

$ ls -la@ test.png 
-rw-r--r--@ 1 danielbeck  staff  23580 23 Jun 20:26 test.png
    com.apple.FinderInfo       32 
    com.apple.ResourceFork   1338 
    com.apple.metadata:kMDItemIsScreenCapture      42 
    com.apple.metadata:kMDItemScreenCaptureType    51 

Для примера я явно выбрал « Просмотр» в качестве приложения, чтобы открыть файл в его окне « Информация» .

$ xattr -p -l com.apple.ResourceFork test.png 
com.apple.ResourceFork:
00000000  00 00 01 00 00 00 05 08 00 00 04 08 00 00 00 32  |...............2|
00000010  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000020  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000030  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000040  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000050  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000060  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000070  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000080  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000090  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
000000A0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
000000B0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
000000C0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
000000D0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
000000E0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
000000F0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000100  00 00 04 04 00 00 00 1A 2F 41 70 70 6C 69 63 61  |......../Applica|
00000110  74 69 6F 6E 73 2F 50 72 65 76 69 65 77 2E 61 70  |tions/Preview.ap|
00000120  70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |p...............|
[snip]

Более старые версии OS X поддерживали использование кода создателя для определения приложения для открытия определенного файла. Некоторые приложения по-прежнему пишут их, и к ним можно обратиться, изучив метаданные Spotlight с помощью mdls . В этом примере я проверяю файл .pxm созданный Pixelmator.

$ mdls test.pxm 
kMDItemAlternateNames          = (
    "test.pxm"
)
kMDItemContentCreationDate     = 2012-06-23 18:23:04 +0000
kMDItemContentModificationDate = 2012-06-23 18:24:12 +0000
kMDItemContentType             = "com.pixelmator.pxm"
kMDItemContentTypeTree         = (
    "com.pixelmator.pxm",
    "public.image",
    "public.data",
    "public.item",
    "public.content"
)
kMDItemDateAdded               = 2012-06-23 18:23:04 +0000
kMDItemDisplayName             = "test"
kMDItemFSContentChangeDate     = 2012-06-23 18:24:12 +0000
kMDItemFSCreationDate          = 2012-06-23 18:23:04 +0000
kMDItemFSCreatorCode           = "PXMT"
[...]

Последняя строка примера вывода показывает код создателя, установленный Pixelmator: PXMT .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .