我已经发布这里。
这是我的last-url.sh
#!/bin/bash
rm -rf /tmp/db.sqlite
cp ~/.mozilla/firefox/*.default-esr/places.sqlite /tmp/db.sqlite ;
LAST_URL=`sqlite3 /tmp/db.sqlite "select url from moz_places order by last_visit_date desc limit 1;"`;
echo $LAST_URL
我的脚本不断给我一个例子stackoverflow.com网址而不是youtube.com一,即使我重新加载页面。
问题隐藏在哪里?
我只有一份xxxxxx.default-esr
个人资料。
测试示例:“google test”是一个全新访问过的URL,其他都是刷新页面
现在我问自己 Firefox 如何创建历史选项卡(它反映了真实的历史)。它使用了哪个文件或哪个 SQL 请求? SQLite?
答案1
脚本修改
#!/bin/bash
rm -rf /tmp/db.sqlite
cp ~/.mozilla/firefox/*.default-esr/places.sqlite /tmp/db.sqlite ;
ORIG_QUERY=`select url from moz_places order by last_visit_date desc limit 1;`
NEW_QUERY=`SELECT url FROM moz_places WHERE visited_count >=1 GROUP BY last_visit_date DESC ORDER BY id LIMIT 1
LAST_URL=`sqlite3 /tmp/db.sqlite ${QUERY}`;
TEST_URL=`sqlite3 /tmp/db.sqlite ${NEW_QUERY};`
#echo $LAST_URL
echo $TEST_URL
解释
根据问题下方的评论,OP 确保数据库不是基于 0 的。我的SQL有点生疏,但是存储的查询${NEW_QUERY}
应该返回“第一行URL,无论是new( visit_count=1
)还是refreshed( visit_count > 1
),其中id
s按日期从最大到最小分组”。换句话说:
如果您今天访问了 1,000 个页面,昨天访问了 500 个页面,并且没有限制,那么您应该会看到今天的日期下列出了 1,000 个页面,昨天的下列出了 500 个页面,并且大 ID 位于顶部。 设置 LIMIT 应返回包含任何页面刷新在内的日期id
中最高的 URL。last_visited
答案2
答案的开头来自这里感谢jscher2000,但还没有解决方案
某些历史记录可能缓存在内存中,但“库”窗口显示了很多条目,因此可能会在磁盘上查找该信息。 SQLite 引擎正在从places.sqlite 文件及其日志文件构建该视图,因此它比您简单地对一个文件进行操作具有更完整的视图。
所以也许解决方案可以来自像这样的工具wal2json尝试解析places.sqlite.wal。我会尝试一下。
正如@jscher2000所说
Firefox 写入 -wal 和 -shm 文件。 ...我很困惑为什么 sqlite3 不自动处理它。 ...https://www.sqlite.org/wal.html