«««

1 grudnia 2010

Znajdź mnie nim przepadnę

"To było gdzieś w zakładkach, coś z gnome w nazwie, a w tytule były gwiazdki."
Znasz to? Standardowy manager zakładek firefox'a jest fajny, ale nie potrafi wyszukiwać więcej niż jednego warunku. Na szczęście baza to SQLite i przy odrobinie trudu ładnie się obrabia.

moz_places.sh

W skrypcie trzeba zmienić pierwszy parametr srcdb na swoją bazę. Tworzymy kopię bazy, bo firefox blokuje do niej dostęp, jeśli jest włączony.
Na wyjściu skryptu dostajemy listę postaci:
link | tytuł
Można też ustawić wypisywanie tylko jednego z nich. Uzyskane dane można już dowolnie przeszukiwać, jeśli się tylko wie jak :). Do pobrania moz_places.sh lub obejrzenia:

#!/bin/bash

srcdb=$HOME/.mozilla/firefox/profil.lucas/places.sqlite
db=/dev/shm/places.sqlite # /dev/shm/ to RAM
[ -f $db ] && rm -f $db
cp $srcdb $db || exit 1
# ------------------------------------------------
usage(){
    echo "${0##*/} { b, bookmarks | h, history} [ -u,--url | -t,--title ]"
    exit $1
}
# ------------------------------------------------
get_history(){
    sqlite3 $db <<!
        SELECT $select
        FROM moz_places p, moz_historyvisits h
        WHERE p.hidden=0 AND p.id = h.place_id
        ;
!
}
# ------------------------------------------------
get_bookmarks(){
    sqlite3 $db <<!
        SELECT $select
        FROM moz_places p, moz_bookmarks b
        WHERE p.hidden=0 AND p.id = b.fk
        ;
!
}
# ------------------------------------------------
# wybieramy co wyświetlić: url, tytuł, wszystko
select='p.url , p.title'
[[ $2 ]] && {
    case "$2" in
        -u|--url)   select='p.url' ;;
        -t|--title) select='p.title' ;;
        *)          usage 1 ;;
    esac
}
# ------------------------------------------------
# wybieramy źródło: zakładki, historia
[[ $1 ]] && {
    case "$1" in
        h|history)   get_history ;;
        b|bookmarks) get_bookmarks ;;
        *)          usage 1 ;;
    esac
} || usage

Jak tego używać

Skrypty wymaga podania, z której tablicy w bazie korzystamy (historia, czy zakładki), a drugi parametr jest opcjonalny.

$ moz_places.sh
moz_places.sh { b, bookmarks | h, history} [ -u,--url | -t,--title ]

$ moz_places.sh b # or h
http://www.web.com|Web title
...

$ moz_places.sh b -u # or --url
http://www.web.com
...

$ moz_places.sh b -t # or --title
Web title
...
Szukaj w adresach ftp
$ moz_places.sh b | grep ^ftp
szukaj tytułu zaczynającego się od słowa fedora
$ moz_places.sh b | awk -F'|' '$2 ~/^fedora/ {print $0}'
... również z dużej litery
$ moz_places.sh b | awk -F'|' '$2 ~/^[fF]edora/ {print $0}'
szukaj tytułu zaczynającego się od słowa [fF]edora, ale w adresie strony nie może być słowa fedora
$ moz_places.sh b \
    | awk -F'|' '$2 ~/^[fF]edora/ {print $0}' \
    | awk -F'|' '$1 !~/fedora/ {print $0}'
Na koniec coś głupiego :) Która domena jest Twoim zdaniem najciekawsza?
$ moz_places.sh b \
    | awk -F'/' '{print $3}' \
    | sed 's:^www\.::g' \
    | sort | uniq -cd | sort -n | tail -n 7

Gdyby ktoś chciał pogrzebać w bazie, a ma zerowe doświadczenie proponuję wygodny GUI sqliteman lub konsole:
pomoc sqlite3 $db ".help"
lista tablic sqlite3 $db ".tables"
schemat wybranej tablicy sqlite3 $db ".schema moz_places"

Brak komentarzy: