適当な思いつきで書くブログ

UbuntuやPerlやJavaScriptやVimやZshやShellScriptやMySQLと戯れている中で適当な思いつきでやってみたことを書いています。

Firefoxのplaces.sqliteからGoogleの検索結果をDELETEするShellを書きました

仕事なり私用なりネットをするときはVimperatorの:[tab]openで履歴を辿ることが多いのですが、リストアップされる履歴にGoogleの検索結果があると本来表示して欲しい履歴が埋もれてしまい少々不便に感じていました。
そこで、Firefoxの履歴が保存されているplaces.sqliteからGoogleの検索結果に該当するレコードをDELETEするShellScriptを書いてみました。

#! /bin/sh                                                                                                                                                                        
# Firefoxが起動しているとplace.sqliteはlockがかかり更新(DELETE)できないので、起動チェック=>起動していたらスルー
if [ `ps -A | grep firefox-bin | wc -l`==0 ]; then
    sqlfile='/tmp/clean_places_sqlite.sql'

    # 削除したいurlの一部
    words="
    www.google.com/search
    www.google.co.jp/search
    "

    for word in ${words}
        do
            # 削除対象となるテーブルは moz_historyvisits, moz_favicons, moz_places
            echo "DELETE FROM moz_historyvisits WHERE moz_historyvisits.place_id IN (SELECT moz_places.id FROM moz_places WHERE moz_places.url LIKE '%${word}%');
                  DELETE FROM moz_favicons WHERE moz_favicons.id IN (SELECT moz_places.favicon_id FROM moz_places WHERE moz_places.url LIKE '%${word}%');
                  DELETE FROM moz_places WHERE url LIKE '%${word}%';" >> ${sqlfile}
        done

    # 作成したSQLをsqliteに流します
    sqlite3 ${HOME}/.mozilla/firefox/default/places.sqlite < ${sqlfile}

    rm ${sqlfile}
fi

# Firefoxを起動
firefox

(Firefox3.6.13@Ubuntu10.10にて動作確認)
修正 : shellからfirefoxを起動するように変更

(追記)試用

Firefoxをこのシェルを叩いて実行するようにしました(起動に遅くなったような気がします...)。

SQLiteのDELETEはWHERE EXISTSやINNER JOINが使えない

SQLiteはDELETE文にWHERE EXISTSやINNER JOINを利用できないようで、別テーブルのSELECT結果を参照してDELETEする場合はWHERE id IN (SELECT id FROM ...)のようにしてあげる必要があります。(つまづいた><)

追伸

前回のエントリーから実に2年以上経っていました...。

2年前はWedデザイナー採用のなんちゃってプログラマーだったのですが、2010年2月から正式にプログラマーとして採用されPHPをメインに開発のお仕事をしています(「なんちゃって」から脱したかは別のお話)。