Macのmdfindを活用する

Macでファイルにタグを付けるでも書いたが、Macのファイルにはいろいろメタデータが付いていて、それを使って高速に検索できる。これはGUIのSpotlightで使われているが、コマンドでもできる。

まず、ファイルのメタデータを表示するコマンド:

mdls filename

2019年6月16日の写真(必ずしも写真ライブラリに入っていない)を検索したいというのが目的。とりあえず写真という条件は省いて、Linuxなら

find / -type f -newermt 2019-06-16 ! -newermt 2019-06-17

でできる。ただし、ファイルシステム全体を検索するのは時間がかかる。

mdfindを使うなら

mdfind 'kMDItemFSCreationDate < $time.iso(2019-06-17) && kMDItemFSCreationDate >= $time.iso(2019-06-16)'

でできる。こっちのほうが高速である。ただし、時間はUTCになるので、少し過去に向かって広めにするほうがよいかもしれない:

mdfind 'kMDItemFSCreationDate < $time.iso(2019-06-17) && kMDItemFSCreationDate > $time.iso(2019-06-15)'

写真(RAWフォーマットの CR2 も含める)だけを表示するには、メタデータの検索式を書くよりも、これらのコマンドの最後に | egrep -i '\.(jpg|jpeg|cr2|heic)$' を付けるほうが簡単そうだ。

メタデータを編集するには osxmetadata というPythonパッケージ兼コマンドラインツールが便利そうである。pip3 install osxmetadata でインストールできる。

osxmetadata --get findercomment filename

または

osxmetadata --get kMDItemFinderComment filename

でFinderの「情報を見る」でセットできるコメントがゲットでき、

osxmetadata --set findercomment 'ほげほげ' filename

または

osxmetadata --set kMDItemFinderComment 'ほげほげ' filename

でセットでき、

mdfind "kMDItemFinderComment == '*げほ*'"

で検索できる。

mdlsで表示されるメタデータをすべてユーザが上書きできるわけではない。

メタデータはrsyncで別Macに送れる。そのためのオプションは、Mac付属の /usr/bin/rsync では -E、本家(Homebrewで入るもの)では -X である。Homebrewで入る新しいrsyncはzlib圧縮に加えてzstd圧縮などができる(zstdがデフォルト)。

続編としてMacのFinderコメントを活用するも書いた。

参考