Récupérer les bookmarks de Firefox en ligne de commande (en jouant avec sqlite)

Depuis que j’utilise l’astuce du Ctrl+l sur Firefox, je me base énormément sur mes bookmarks (marque-pages). L’étape suivante était de pouvoir les récupérer en ligne de commande (pour faire des trucs rigolos avec). Ça tombe bien, ça va me permettre de vous montrer un peu sqlite.

sqlitebrowser

Sur Ubuntu/Debian un apt install sqlitebrowser vous installera sqlitebrowser, à mon sens la meilleure application graphique pour les bases sqlite. Afin de jouer avec la base sqlite Firefox qui nous intéresse, on lancera sqlitebrowser ~/.mozilla/firefox/*.default*/places.sqlite &. Je vous invite ensuite à cliquer sur l’onglet Parcourir les données puis dans Table regarder moz_boomarks et moz_places. Ce sont les deux tables qui vont nous intéresser.

Dans l’onglet Exécuter le SQL :

  • Si vous tapez select url from moz_places; puis appuyez sur le bouton Play (ou F5 ou Ctrl+Entrée), vous allez récupérer la liste des URL de vos bookmarks. Vous venez d’afficher la colonne url de la table moz_places
  • Si vous tapez select title from moz_bookmarks; puis appuyez sur le bouton Play, vous allez récupérer la liste des titres de vos bookmarks. Vous venez d’afficher la colonne title de la table moz_bookmarks
  • Malheureusement la colonne url de la table moz_places vous renvoie beaucoup de résultats. On va utiliser select url from moz_places,moz_bookmarks where moz_places.id=moz_bookmarks.fk;, on sélectionne la colonne url des tables moz_places et moz_bookmarks où (condition where) les valeurs de la colonne id de la table moz_places (moz_places.id) sont égales aux valeurs de la colonne fk de la table moz_bookmarks (moz_bookmarks.fk)
  • Sinon vous pouvez aussi faire select url from moz_places inner join moz_bookmarks on fk=moz_places.id; mais pour les explications, il faudra me payer

Interroger sqlite en ligne de commande

On peut tester nos requêtes SQL, chercher ce qui nous intéresse dans les tables mais comment récupérer les résultats directement depuis la ligne de commande ? On aura besoin de apt install sqlite3 puis echo 'select url from moz_places,moz_bookmarks where moz_places.id=moz_bookmarks.fk;' | sqlite3 ~/.mozilla/firefox/*.default*/places.sqlite. C’est simple… quand on connaît.

Voici la ligne de commande complète que je vous recommande echo 'select url from moz_places,moz_bookmarks where moz_places.id=moz_bookmarks.fk;' | sqlite3 ~/.mozilla/firefox/*.default*/places.sqlite | grep '^http' > ~/firefox.bookmarks. La seule subtilité est le grep '^http' qui va sélectionner uniquement les lignes commençant par http en effet il est fort probable que vous ne vouliez pas les « place: » et les bookmarklets (comme celui du Jdh).

Moi perso je voulais encore autre chose les url des bookmarks ainsi que leurs titres :

echo 'select moz_places.url,moz_bookmarks.title from moz_places,moz_bookmarks where moz_places.id=moz_bookmarks.fk;' | sqlite3 ~/.mozilla/firefox/*.default*/places.sqlite | grep '^http' > ~/firefox.bookmarks

Fonction ff

ff() {
if [[ "$#" -eq 0 ]]
then
	(firefox >/dev/null 2>&1 &)
else
	fzf --nth 2.. --delimiter "\|" --multi --literal --exact --query="$*" --tiebreak end --select-1 --exit-0 --print0 <~/firefox.bookmarks | sed -z 's/|.*//' | xargs -0 -I '{}' bash -c '(firefox "{}" >/dev/null 2>&1 &)' || (firefox "https://www.google.fr/search?q=$*" >/dev/null 2>&1 &)
fi
}

Vous devez copier cette fonction par exemple dans votre ~/.bashrc. Vous aurez besoin de fzf (et du man hé hé hé). Si vous tapez ff, ça vous lancera Firefox. J’ai « https://www.journalduhacker.net/newest|jdh » dans mon ~/firefox.bookmarks, si je tape ff jdh, ça me lancera https://www.journalduhacker.net/newest.

Je ne donne aucune explication de plus : 1/ Devoir de vacances 2/ Pour apprendre et comprendre, il faut nécessairement mettre les mains dedans, il ne suffit pas de lire, il faut pratiquer, tester, se tromper 3/ Je me suis dit que certains apprécieraient de chercher à comprendre par eux-mêmes, il y a un grand plaisir à découvrir et comprendre par soi-même 4/ L’article sur fzf arrivera un jour mais va être long ha ha ha

Tcho !

Déjà 8 avis pertinents dans Récupérer les bookmarks de Firefox en ligne de commande (en jouant avec sqlite)

  • Salut,

    ça m’a fait pensé à Surf. Je m’étais bricolé un système de bookmarks qui les enregistrait dans un fichier, une URL par ligne, et qui chargeait ce fichier quand on lançait le dmenu équivalent à la barre d’adresse. Pratique pour faire de l’auto-complétion.

  • An'h Onÿm
    Merci pour l’article! Je compte exporter mes favoris de Firefox (4000+ uniques bookmarks), pour les importer dans un système comme shaarli (en plus j’ai ~40000 liens, merci les synchronisations silencieuses foireuses de feu Xmarks). J’avais besoin de récupérer également le dossier dans lequel se trouve le marque page (qui servira de tag initial), donc j’ai adapté la requête SQL que tu proposes en réalisant une jointure supplémentaire de moz_bookmarks sur elle-même. Si jamais ça peut servir à quelqu’un, voici ma requête:

    SELECT
    DISTINCT places.url,
    bk_links.title,
    bk_parents.title

    FROM
    moz_places places,
    moz_bookmarks bk_links,
    moz_bookmarks bk_parents

    WHERE
    places.id = bk_links.fk
    AND bk_links.parent = bk_parents.id
    AND places.url LIKE ‘http%’

    ORDER BY
    bk_parents.title,
    bk_links.title
    ;

Les commentaires sont fermés.