sqlite ファイルがいくつかあり手動で vacuum と reindex を実行すること、拡張によって動的に sqlite ファイルが増えることから、スクリプトにガリガリ手動で登録することが面倒なのですべての sqlite ファイルに対して vacuum と reindex をするシェルスクリプトを書きました。
PROFILE_DIR には自分のプロファイルディレクトリのパスが入ります。また Firefox が起動中の場合、 Firefox が使用している一部の sqlite ファイルにはロックがかかっているためエラーになります。
#!/bin/sh PROFILE_DIR="/Users/xxxxxxxx/Library/Application Support/Firefox/Profiles/xxxxxxxx.default" files=`find "$PROFILE_DIR" -name '*.sqlite'` IFS=' ' for file in $files;do echo "execute $file" sqlite3 $file vacuum && sqlite3 $file reindex done
始めは find xargs のワンライナーで決めようと思ったのですが、 && のところをどう書けばいいのか分からなかったのでスクリプトに逃げました。 Mac もパスにスペースが見事に入っているためシェルの for のところで苦労しましたが、おかげで IFS 変数を理解しました。
[追記]
Firefox 終了時に最適化を実行する拡張がありました。