Изменение метаданных файла из CLI, которые будут отображаться в Finder

2

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

  • Если я Cmd + I файл, и изменить Комментарии на FOO, mdlsпоказывает FOO и Finder показывает FOO.
  • Если я устанавливаю Комментарии на BAR из терминала, mdlsпоказывает «BAR», но Finder все еще показывает «FOO»!

Как я могу изменить поле «Комментарий» из терминала, чтобы изменение распространялось в Finder?

$ xattr -w com.apple.metadata:kMDItemFinderComment "BAR" test.txt
$ mdls test.txt
kMDItemFinderComment = "BAR"

Обновление : я заметил, что при использовании Finder / AppleScript для Комментария задается двоичный список свойств, содержащий значение. Так что, возможно, можно обойти AppleScript и повысить производительность?

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<string>My comment</string>
</plist>

Я попытался отредактировать список свойств и передать его обратно xattr. Однако xattrвыдает сообщение об ошибке, Odd-length stringдаже если размер файла hexна самом деле является четным числом. Кто угодно?

xattr -p com.apple.metadata:kMDItemFinderComment a | xxd -r -p | plutil -convert xml1 -o plist -
nano plist
cat plist | plutil -convert binary1 -o - - | xxd -p -c 999 -u > hex
xattr -w -x com.apple.metadata:kMDItemFinderComment hex test.txt
forthrin
источник

Ответы:

1

mdlsиспользует свою базу данных для отображения информации о файле, а не расширенные атрибуты, которые установлены в этом файле. Таким образом, чтобы заставить его работать, вы должны импортировать файл в его базу данных после изменения xattrс:

mdimport /path/to/file

Чтобы увидеть комментарий об обновлении в Finder, вы можете использовать AppleScript. Вот код:

#!/bin/bash                                                                                                                                                                                                     

filepath="$1"
comment="$2"

/usr/bin/osascript -e "set filepath to POSIX file \"$filepath\"" \
-e "set theFile to filepath as alias" \
-e "tell application \"Finder\" to set the comment of theFile to \"$comment\""

Лучше версию этого сценария можно найти на StackOverflow пользователя l'L'l.

Матеуш Шлосек
источник
Это работает, но довольно медленно. Изменение комментариев занимает почти три секунды для десятка файлов. Можно ли сократить или оптимизировать AppleScript? Существует ли более быстрое и короткое решение, не использующее AppleScript? Я оставлю вопрос открытым для дальнейших предложений.
forthrin