コンピュータ / 2007/12/16 (Sun) / 編集 |
さて、UNIX実験のついでにSpotlightのコメントについてしらべてのでメモっておく
EAというのはLeopardのHDDのフォーマットであるHFS+の機能の一つで、ファイル付加情報(いわゆるメタデータ)の一種で、「ファイル名」「パーミッション」「ファイル作成日」以外の様々な情報が記録されている領域らしい。
Finder情報は「com.apple.FinderInfo」、リソースフォークは「com.apple.ResourceFork」、その他の情報は「com.apple.metadata」という名前のEAの一部として記録されるらしい。
だもんでHFS+以外のファイルシステムにファイルをコピーするとこれらの情報(Spotlightコメントとか)は消え去る(「AppleDouble」とかいう機能で「._元のファイル名」という形式の別ファイルに書き出される)らしい。
保存場所
SpotlightのコメントはLeopardからは「EA (Extended Attributes)」という領域に保存されているらしいEAというのはLeopardのHDDのフォーマットであるHFS+の機能の一つで、ファイル付加情報(いわゆるメタデータ)の一種で、「ファイル名」「パーミッション」「ファイル作成日」以外の様々な情報が記録されている領域らしい。
Finder情報は「com.apple.FinderInfo」、リソースフォークは「com.apple.ResourceFork」、その他の情報は「com.apple.metadata」という名前のEAの一部として記録されるらしい。
だもんでHFS+以外のファイルシステムにファイルをコピーするとこれらの情報(Spotlightコメントとか)は消え去る(「AppleDouble」とかいう機能で「._元のファイル名」という形式の別ファイルに書き出される)らしい。
内容を見てみる
Spotlightコメントを確認するには「プログラムで実装して確認する」「Finder.appの「情報を見る」で確認する」「コマンドラインで確認する」という三通りの方法がある(もっとあるかもしんない)というわけでコマンドで確認&設定する方法をメモる
まず、事前にファイルにSpotlightコメントを追加しておく、でもって「ls -l」するとLeopardからは
[:~/Pictures/GOSICK]%ls -l
total 648
-rwxrwxrwx@ 1 e055717 staff 17232 12 7 2006 GOSICK1.jpg
-rwxrwxrwx@ 1 e055717 staff 27113 12 7 2006 GOSICK2.jpg
-rwxrwxrwx@ 1 e055717 staff 64439 12 7 2006 GOSICK3.jpg
-rwxrwxrwx@ 1 e055717 staff 22908 12 7 2006 GOSICK4.jpg
-rwxrwxrwx@ 1 e055717 staff 55067 12 7 2006 GOSICK5.jpg
-rwxrwxrwx@ 1 e055717 staff 39364 12 7 2006 GOSICK6.jpg
-rwxrwxrwx@ 1 e055717 staff 64045 12 7 2006 GOSICKs.jpg
-rwxrwxrwx@ 1 e055717 staff 26439 12 7 2006 GOSICKs2.jpg
みたいな表示になってるのだが、「-rwxrwxrwx@」の部分の「@」がEA情報があるという意味らしい
そこで「ls -l@」をすると
[:~/Pictures/GOSICK]%ls -l@ GOSICK1.jpg
-rwxrwxrwx@ 1 e055717 staff 17232 12 7 2006 GOSICK1.jpg
com.apple.metadata:kMDItemFinderComment 48
みたいのがでるが、この「com.apple.metadata:kMDItemFinderComment」というのがEA情報の名前なんだとさ
なのでこんどは「com.apple.metadata:kMDItemFinderComment」になにが入っているか見てみる、「xattr」コマンドを利用して
[:~/Pictures/GOSICK]%xattr -p com.apple.metadata:kMDItemFinderComment GOSICK1.jpg
bplist00VGOSICK
うん、ちゃんと設定したSpotlightコメントが見れてる(なんか前半に「bplist00V」とかついてるのはなんだろ?)
内容を変更してみる(コマンド編)
というわけで次は変更のしかたについて、もちろんFinderの「情報を見る」からでもできるけどここはコマンドで「xattr」の使い方は
usage: xattr [-l] file [file ...]
xattr -p [-l] attr_name file [file ...]
xattr -w attr_name attr_value file [file ...]
xattr -d attr_name file [file ...]
The first form lists the names of all xattrs on the given file(s).
The second form (-p) prints the value of the xattr attr_name.
The third form (-w) sets the value of the xattr attr_name to attr_value.
The fourth form (-d) deletes the xattr attr_name.
らしいのでためしてみると
[:~/Pictures/GOSICK]%xattr -p com.apple.metadata:kMDItemFinderComment GOSICK1.jpg
bplist00VGOSICK
[:~/Pictures/GOSICK]%xattr -w com.apple.metadata:kMDItemFinderComment testComment GOSICK1.jpg
[:~/Pictures/GOSICK]%xattr -p com.apple.metadata:kMDItemFinderComment GOSICK1.jpg
testComment
[:~/Pictures/GOSICK]%xattr -d com.apple.metadata:kMDItemFinderComment GOSICK1.jpg
[:~/Pictures/GOSICK]%xattr -p com.apple.metadata:kMDItemFinderComment GOSICK1.jpg
No such xattr: com.apple.metadata:kMDItemFinderComment
おぉ〜 できてるよ!
内容を変更してみる(システムコール編)
まぁまだ試していないがシステムコールから操作する方法もメモっておくまずEAの名前のリストを取得するには「listxattr」関数を使うらしい
#include
ssize_t
listxattr(const char *path, char *namebuf, size_t size, int options);
ssize_t
flistxattr(int fd, char *namebuf, size_t size, int options);
path(またはfd(ファイルディスクリプタ?))で指定したファイルに記述されているEAの名前をsizeバイトのnamebufに格納するらしいよ?詳細は「man」コマンドで調べましょう
次に内容の取得は「getxattr」内容の設定は「setxattr」でやるらしい
#include
ssize_t
getxattr(const char *path, const char *name, void *value, size_t size, u_int32_t position, int options);
ssize_t
fgetxattr(int fd, const char *name, void *value, size_t size, u_int32_t position, int options);
#include
int
setxattr(const char *path, const char *name, void *value, size_t size, u_int32_t position, int options);
int
fsetxattr(int fd, const char *name, void *value, size_t size, u_int32_t position, int options);
ちなみに、これらの関数で使う文字コードはUTF-8らしいよ?
しかしObjective-Cでの関数が見当たらんのだがObjective-Cでは設定できんのか?
参考文献:
Undocumented Mac OS X:第11回 HFS Plus独自の機能【後編】 (2/2) OS X ハッキング!(253) Leopard解体新書(4) ~拡張された拡張属性~ [Appleの公式ページ]filesystem_examples
PR
トラックバック
URL :
コメント