9 locate 用のデータベースが作れない?

macOS でファイル名でファイルを検索する locate コマンドを使っている (mdfind と使い分けをしている)。 データベース・ファイルを用意しておく必要があり、 一度 sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist のようなコマンドを実行しておけ、と言われている。ところが
% sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist

Load failed: 5: Input/output error
Try running `launchctl bootstrap` as root for richer errors.
というエラーメッセージに悩まされていて。 忙しいので治さなかったのだけれど、いいかげん困ったので、調べてみた。

plist 自体はもともと提供されているものなので、問題はないはず。実際、 文法チェックしてみると
% plutil -lint /System/Library/LaunchDaemons/com.apple.locate.plist

/System/Library/LaunchDaemons/com.apple.locate.plist: OK
と表示される。

一度 unload してから load するのだそうだ。
% sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.locate.plist

Password:
% sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist
%
できた。


パーミッションが 700 である自分のディレクトリィの下は検索しない。 自分のホームディレクトリィのパーミッションをそうしている場合には、 自分のファイルのデータベースを別に作るべきか。

mkdir ~/var

cp -p /etc/locate.rc ~
vi ~/locate.rc

こんなふうに書き換える
% diff /etc/locate.rc ~/locate.rc
13c13
< #FCODES="/var/db/locate.database"
---
> FCODES="/Users/mk/var/locate.database"
16c16
< #SEARCHPATHS="/"
---
> SEARCHPATHS="/Users/mk"
%

makelocatedatabase
#!/bin/sh
export LOCATE_CONFIG="/Users/mk/locate.rc"
/usr/libexec/locate.updatedb



桂田 祐史