Зміна метаданих файлів від 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

Відповіді:


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? Залишаю питання відкритим для подальших пропозицій.
Попередження
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.