W jaki sposób Mavericks's Finder przechowuje tagi?

13

Nie korzystałem jeszcze z Mavericks.
Czy wyszukiwarka przechowuje tagi w samym pliku (np. Xmp), czy jest zasilany przez jakąś bazę danych? albo co?

Kevin Grace
źródło
Możesz spróbować, zanim zadasz pytanie dotyczące systemu OS X Maverick.
Ramhound
Pamiętaj, że podejście Mavericks do oznaczania w systemie plików nie ograniczało się do Findera.
Graham Perrin

Odpowiedzi:

12

Mavericks zapisuje tagi jako atrybut rozszerzony

Po zniesieniu NDA: Mavericks zapisuje tagi jako atrybut rozszerzony w com.apple.metadata:_kMDItemUserTags. Możesz je sprawdzić samodzielnie za pomocą polecenia mdls w następujący sposób:

mdls -name kMDItemUserTags Witaj

Epicka recenzja OS X 10.9 autorstwa Johna Siracusa opisuje szczegółowo architekturę znaczników .

Dan
źródło
3
Jak przechowywane są rozszerzone atrybuty?
occulus
1

Tagi są przechowywane w rozszerzonym atrybucie o nazwie com.apple.metadata: _kMDItemUserTags. Jego wartością jest binarna lista właściwości, która zawiera pojedynczą tablicę ciągów:

$ xattr -p com.apple.metadata:_kMDItemUserTags file3|xxd -r -p|plutil -convert xml1 - -o -
<?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">
<array>
    <string>Red
6</string>
    <string>aa</string>
    <string>Orange
7</string>
    <string>Yellow
5</string>
    <string>Green
2</string>
    <string>Blue
4</string>
    <string>Purple
3</string>
    <string>Gray
1</string>
</array>
</plist>

Tagi dla kolorów mają wartości takie jak Red\n6(gdzie \njest wysuw linii).

Możesz użyć xattr, aby skopiować tagi z jednego pliku do drugiego:

xattr -wx com.apple.metadata:_kMDItemUserTags "$(xattr -px com.apple.metadata:_kMDItemUserTags file1)" file2
xattr -wx com.apple.FinderInfo "$(xattr -px com.apple.FinderInfo file1)" file2

Jeśli flaga kColor w com.apple.FinderInfo jest wyłączona, Finder nie pokazuje okręgów dla kolorów obok plików. Jeśli flaga kColor jest ustawiona na pomarańczowy, a plik ma czerwony znacznik, Finder pokazuje zarówno czerwone, jak i pomarańczowe kółka. Możesz ustawić flagę kColor za pomocą AppleScript:

xattr -w com.apple.metadata:_kMDItemUserTags '("Red\n6","new tag")' ~/desktop/file4"
osascript -e 'tell application "Finder" to set label index of file "file4" of desktop to item 1 of {2, 1, 3, 6, 4, 5, 7}'

'("Red\n6","new tag")' to stara składnia plist do tego:

<?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">
<array>
    <string>Red
6</string>
    <string>new tag</string>
</array>
</plist>

xattr -p com.apple.FinderInfo file|head -n1|cut -c28-29wypisuje wartość bitów użytych dla flagi kColor. Czerwony to C, pomarańczowy to E, żółty to A, zielony to 4, niebieski to 8, magenta to 6, a szary to 2. Flaga, która dodaje 1 do wartości, nie jest używana w OS X.

Lri
źródło
1
Jeśli utworzę tag o nazwie „Finansowy”, na przykład w kolorze czerwonym, czy w rozszerzonym atrybucie plist jest przechowywany „Finansowy” lub „Czerwony”? A jak odbywa się mapowanie między nazwą a kolorem?
Vaddadi Kartick
„Flaga, która dodaje 1 do wartości, nie jest używana w OS X.” Co to znaczy?
Nicolas Barbulesco
Ta odpowiedź jest szczegółowa. Różnica między kolorami a tagami nie jest jednak jasna.
Nicolas Barbulesco
Gdzie jest przechowywany ten rozszerzony atrybut?
Nicolas Barbulesco
1

O ile mogłem przeczytać w Internecie, z kilku źródeł, bardzo prawdopodobne jest, że Mavericks będzie przechowywać informacje o znacznikach jako coś naprawdę zbliżonego do strategii OpenMeta w samym pliku. Do tej pory mieliśmy już tagi i kilka aplikacji pomagających w tym, na przykład Leap / Yep. Ale była to tylko najlepsza praktyka skonsolidowana powyżej standardowej dolnej warstwy - OpenMeta. Teraz Mavericks chce zrobić krok dalej, czyniąc tagi (i sposób ich zakodowania w systemie plików) oficjalnym. Tagi plus będą miały ustalony zestaw kolorów (7?), A to może dodatkowo pomóc w podzieleniu znaczników na zestawy, aby uzyskać dodatkowy semantyczny. Wielu z nas uważa, że ​​może to być ogromny krok naprzód w wizji systemu plików dużego lidera branży, aby ostatecznie podjąć przyszłe wybory (aplikacje będą w tym bardziej polegać i być może sam system operacyjny będzie oczekiwał specjalnych adnotacji w całym systemie). Ze względu na szczegóły OpenMeta chce, aby metadane były opisywane jako xattr (atrybuty rozszerzone) plików, tak aby sam system plików nie dbał o to, ponieważ nie jest objęty zakresem.

Pytanie było w gruncie rzeczy dość stare i Mavericks wkrótce stanie się GMem. Więc pomimo tego, że są tylko informacje związane z domeną Beta, jest to całkiem słuszne, wszystko, co powiedziałem powyżej. W Internecie toczy się kilka dyskusji na ten temat, a jedna z nich jest tutaj:

https://groups.google.com/d/msg/openmeta/DK4Of2QGkpM/KIK9VKaCQdkJ

Najciekawsza część to:

Znaczniki Apple są implementowane w taki sam sposób, jak znaczniki OpenMeta - jako rozszerzone atrybuty dołączone do plików w systemie plików. Jedyną różnicą jest to, że nazwa atrybutu to _kMDItemUserTags zamiast kMDItemOMUserTags („OM” w ostatnim znaczniku dotyczy „OpenMeta”). Dane znaczników zarówno znaczników Mavericks, jak i OpenMeta są listami właściwości, ale nie spojrzałem na wewnętrzny format list, więc nie wiem, czy są dokładnie takie same, czy nie. Nie wiem również, jakie, jeśli w ogóle, dyskowe lub alternatywne metody są używane w formatach dyskowych innych niż HFS + - wiem, że hype Apple powiedział, że możesz również oznaczać pliki na iCloud, więc może to być jakiś problem.

Długa i krótka jest jednak to, że przynajmniej na lokalnych dyskach Mac, dane znacznika OpenMeta będą musiały zostać zmigrowane do nowego atrybutu _kMDItemUserTags, aby Maverick mógł je zobaczyć natywnie. Nie jest to wielka sprawa, ale ktoś musi napisać narzędzie, aby to zrobić.

Diego
źródło
1
Dziwne, groups.google.com/d/msg/openmeta/DK4Of2QGkpM/KIK9VKaCQdkJ to link podany przez Google do postu, ale podążanie za tym linkiem czasami nie ujawnia wymaganego postu.
Graham Perrin