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)
Les commentaires sont fermés.
Je suis d’un classicisme avec ma souris, parfois. Elle aime gambader sur les écrans, même avec cette chaleur.
Tu sais pas ce qui est bon, inculte va
Tcho !
ç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.
Excellente remarque, ma foi surtout par habitude d’utiliser grep et je trouve ça plus simple pour un article comme celui-ci s’adressant à tous y compris les débutants mais ta proposition est meilleure techniquement, elle évite un pipe.
Merci, Tcho !
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
;
Merci à toi, sympa !
Tcho !
sinon il y a également des outils en ligne pour interroger une base de données SQLite (https://extendsclass.com/sqlite-browser.html).
ps: Votre formulaire de contact ne semble pas fonctionner (On obtient l’erreur « Page non trouvée » lorsque l’on envoie un message).