Как преобразовать файлы Apple .textClipping в обычный текст/HTML?

Если вы выберете текст в приложении (например, Safari, Chrome или любом другом приложении, которое позволяет перетаскивать текст) и перетащите выделение на панель Finder, то на панели будет создан файл с невидимым .textClippingрасширением. Расширение может отображаться или не отображаться в Finder в зависимости от ваших настроек.

Первоначально я предположил, что файл представляет собой обычный текст, и попытался переименовать его, чтобы добавить .txtрасширение, но двойной щелчок по-прежнему открывает его в Finder.

Затем я проверил тип файла:

file 'some text.textClipping'
>> some text.textClipping: Apple binary property list

cat-ing показывает заголовок, за bplist00?XUTI-Data?которым следует читаемый текст.

Я старался:

mv 'some text.textClipping' 'some text.txt'

но даже после этого он по-прежнему открывается с помощью Finder, а не связанного с .txtфайлами приложения.

Другая «странность» заключается в том, что перетаскивание файла .textClipping в терминал — который я иногда использую как способ вставки полного пути — дает неожиданный эффект вставки содержимого файла, а не его пути.

Я хотел бы использовать .textClippingфайлы для быстрого создания фрагментов веб-страниц и других приложений, но по понятным причинам я хочу избежать хранения фрагментов в каком-то проприетарном двоичном формате Apple.

Есть ли способ преобразовать фрагменты в переносимый формат, например в обычный текст? Почему этот тип файлов ведет себя не так, как другие? Есть ли какое-то расширенное свойство файла? Тогда как его убрать, чтобы файлы перестали быть "особыми"?

Ответы (2)

Дальнейшее изучение списков двоичных свойств Apple привело меня к попытке plutil -convert xml1 note.textClippingсоздать файл XML с читаемым текстом фрагмента в виде текста UTF-8, а затем версии того же текста в кодировке base64 в UTF-16, mac-plain и HTML.

Даже после преобразования двоичного файла в формат XML Finder по-прежнему открывает файл в своем собственном средстве просмотра, независимо от того, какое расширение установлено (например, .plistили .xml).

При запуске /bin/ls -alв папке @рядом с именем файла отображается значок, который указывает, что файл имеет расширенные атрибуты, поэтому похоже, что они вызывают «особое» поведение в Finder.

Этот ответ заставил меня попробовать

xattr -l note.plist 

что показывает, что часть содержимого заметки хранится в виде расширенного ключа атрибута.

И, наконец, очистка всех расширенных атрибутов превратила файл в «обычный» файл, поэтому теперь он открывается с соответствующим приложением:

xattr -c note.plist 

Приведенная выше команда предназначена для одного файла, чтобы удалить расширенные атрибуты для всех файлов в текущей папке:

xattr -rc .

Расширенные атрибуты могут быть полезны в некоторых случаях — например, если вы загрузили файл с помощью Safari или Chrome, исходный URL-адрес будет сохранен как расширенный атрибут, который вы можете увидеть xattr -l myfile.zip, нажав правой кнопкой мыши файл в Finder и выбрав «Информация » > « Сведения». URL-адрес будет отображаться в разделе «Дополнительная информация» > «Откуда». (Еще одна причина не использовать wget, если вы хотите отслеживать происхождение файла.)

Крошечный фрагмент python3, который можно добавить в качестве быстрого действия в Finder с помощью ootb Automator.app («Создать» > «Быстрое действие» > найти и перетащить Run Shell Scriptна правую рабочую панель).

import plistlib
import sys
from pathlib import Path

clippath = Path(sys.argv[1])

with clippath.open('rb') as fi:
    plist = plistlib.load(fi)
    utf8text = plist['UTI-Data']['public.utf8-plain-text']
    html = plist['UTI-Data']['public.html']

    with clippath.with_suffix(".txt").open(mode='w', encoding='utf-8') as ft:
        ft.write(utf8text)

    with clippath.with_suffix(".html").open(mode='wb') as ft:
        ft.write(html)

Вот как фрагмент должен выглядеть в автоматизаторе (при условии, что у вас установлен python3 /usr/local/bin/python3):

введите описание изображения здесь

Нажатие « Сохранить » в автоматизаторе запросит имя (например, Convert Clipping). После сохранения щелкните правой кнопкой мыши файл в Finder, выберите Quick Actions> Convert Clipping. Будут созданы два новых файла .txtи .html(если вы создаете вырезки с веб-страницы, в HTML-версии будут сохранены ссылки).