如何 "delete empty bookmark folders" 或 "merge duplicate folders"

How to "delete empty bookmark folders" or "merge duplicate folders"

在使用 XMarks+Firefox+Chrome+Android 多次出现错误的同步体验后,我的书签文件夹完全乱七八糟:我有重复的文件夹名称,很多但不是全部都是空的。

我不久前停止使用 Xmarks,显然是为了防止它破坏东西。我不知道有多少书签不见了...Xmarks 有一个方便的书签同步历史记录,但是从那里修复所有东西太麻烦了(没有自动方式)

我正在考虑手动编辑 places.sqlite 书签数据库...

找了一段时间后,我决定手动修复 places.sqlite Firefox 的书签数据库。

下载 sqlite3 客户端后,当然 备份我的 places.sqlite 文件 我提出了这些问题。

就我而言,我并不是特别了解与书签相关的描述、关键字或任何元数据。

1- 创建一个辅助table 有一个id->文件夹名称:

CREATE TABLE ufld AS 
    SELECT min(id) AS id, title
    FROM moz_bookmarks
    group by title
    order by title;

2- 创建另一个辅助 table,其中每个书签都有其父文件夹名称及其 ufld 名称(如果您想先查看,则需要的列数比需要的多):

CREATE TABLE bkm_fld_ufld AS 
SELECT 
    b.id AS bid, 
    b.parent AS bparent, 
    b.title AS btitle, 
    b.type AS btype,
    fld.id AS fid, 
    fld.parent AS fparent,
    fld.title AS ftitle,
    fld.type AS ftype,
    ufld.id AS ufldid,
    ufld.title AS ufldtitle
FROM moz_bookmarks b 
JOIN moz_bookmarks fld ON 
    fld.id = b.parent
JOIN ufld ON 
    ufld.title = fld.title;

3- 使用辅助 tables 更新书签(省略 'special folders'):

UPDATE moz_bookmarks 
SET parent = (SELECT bkm_fld_ufld.ufldid 
              FROM bkm_fld_ufld 
              WHERE bkm_fld_ufld.bid = moz_bookmarks.id) 
WHERE guid NOT GLOB '*___';

4- 清理:

DROP table ufld;
DROP table bkm_fld_ufld;

就是这样,现在我可以在我的 Firefox 配置文件文件夹中复制回 places.sqlite 并享受刷新和清理的书签。

如果有人提出更好的方法,我听说...

Firefox 同步更新

如果启用了 Firefox Sync,那么它会尝试将选项卡恢复到修改 places.sqlite 文件之前的状态。

解决方法是:

  1. 断开 Firefox 与 Firefox Sync 的连接
  2. 如前所述修复places.sqlite
  3. 将固定书签导出到文件
  4. 连接到 Firefox Sync 并等待它完成它的工作
  5. 删除所有书签
  6. 恢复固定书签的备份文件

瞧...Firefox Sync 现在正在将您所有连接的设备与固定书签同步