MacのFinderでファイルを右クリックして「情報を見る」を選ぶと,次のような画面が現れる。ここにタグを複数設定することができる。次のファイルにはタグ「Deep Learning」「LeCun」「Bengio」「Hinton」「2015」が設定されている。

タグはコマンドで確認できる:
$ mdls -name kMDItemUserTags nature14539.pdf
kMDItemUserTags = (
"Deep Learning",
LeCun,
Bengio,
Hinton,
2015
)
このタグはSpotlightで検索できるし,次のようにコマンドでも検索できる:
$ mdfind "kMDItemUserTags == Hinton && kMDItemUserTags == Bengio" $ mdfind "kMDItemUserTags == 'Deep Learn*'"
検索にはファイル名も含ませることができる:
$ mdfind "kMDItemUserTags == Hinton && kMDItemFSName == *.pdf"
kMDItemFSName 以外に kMDItemDisplayName もあるが,こちらは表示名である(例えば「Documents」と「書類」)。
これ以外にどんなメタデータがあるかは,mdls ファイル名 として調べられる。
これらのメタ情報はMac固有のものである。別のMacに送る場合は rsync -auvzE .... のように -E オプションを付ける必要がある。
[2024-09-19追記] 教えていただいたが、Homebrewで入る本家rsyncでも -X オプションでメタ情報が送れるようになっていた。この新しいrsyncはzlib圧縮に加えてzstd圧縮などができる(zstdがデフォルト)。
タグを操作するもっと便利なコマンドとして tag がある。Homebrew でもインストールできる。
$ tag --help
tag - A tool for manipulating and querying file tags.
usage:
tag -a | --add <tags> <path>... Add tags to file
tag -r | --remove <tags> <path>... Remove tags from file
tag -s | --set <tags> <path>... Set tags on file
tag -m | --match <tags> <path>... Display files with matching tags
tag -f | --find <tags> <path>... Find all files with tags (-A, -e, -R ignored)
tag -u | --usage <tags> <path>... Display tags used, with usage counts
tag -l | --list <path>... List the tags on file
<tags> is a comma-separated list of tag names; use * to match/find any tag.
additional options:
-v | --version Display version
-h | --help Display this help
-A | --all Display invisible files while enumerating
-e | --enter Enter and enumerate directories provided
-R | --recursive Recursively process directories
-n | --name Turn on filename display in output (default)
-N | --no-name Turn off filename display in output (list, find, match)
-t | --tags Turn on tags display in output (find, match)
-T | --no-tags Turn off tags display in output (list)
-g | --garrulous Display tags each on own line (list, find, match)
-G | --no-garrulous Display tags comma-separated after filename (default)
-c | --color Display tags in color
-p | --slash Terminate each directory name with a slash
-0 | --nul Terminate lines with NUL (\0) for use with xargs -0
--home Find tagged files in user home directory
--local Find tagged files in home + local filesystems
--network Find tagged files in home + local + network filesystems
使い方の例:
$ tag --add LeCun,Bengio,Hinton,2015,'Deep Learning' nature14539.pdf $ tag nature*.pdf # タグをリスト $ tag --find Hinton,2015 # AND検索 $ tag --find 'deep learning' /Volumes/opt # /Volumes/opt 以下に限定
残念なことに mdfind と違ってワイルドカード * が使えない。
$ mdfind "kMDItemUserTags == 'Deep Learn*'" # 見つかる $ tag --find 'Deep Learn*' # 見つからない
追加リンク:Macで検索結果を絞り込む
追加リンク:Terminal command to get all of a file's metadata?(mdls 以外に xattr -l、ls -l@ がある。画像についてはmacOSの sips、ImageMagickの identify、写真については exiftool がメタ情報を拾ってくれる)
追記:ファイルの種類を調べるには file コマンドがあるが、これをAIで賢くしたGoogleの Magika ができた。