Oct 20, 2017
导出 Safari 历史记录
起因
因为在 iPad 上 Safari 的稍后阅读有问题,我去设置里面清除了 Safari 的缓存,结果把我一百多个已经打开的标签都删掉了,我快速设置 iPad 为飞行模式,然后在 Mac 端把所有 Safari 同步的标签都打开,导致 Safari 有点受不了,卡机。
我就等了老半天,Safari 没响应,把所有其它无关程序都关掉,又等了很久,结果还是切换不了标签,但可以保存所有的标签到收藏夹。于是我想也行,先保存到收藏夹,然后重启点电脑就行了。
结果重启的时候一直重启不能,我就强制关闭了,重启后就像什么都没发生过一样,收藏夹里面没有这一百多个记录,并且也没有自动打开所有内容,也不能通过 Open Last Session 恢复,无语。最后看到历史记录里面还是有的,但是难道还要一个一个打开?然后保存?
于是想到了导出 Safari 历史记录。
操作
找到 Safari 历史记录数据库,~/Library/Safari/History.db
, 然后用 [DB Browser for SQLite.app](https://github.com/sqlitebrowser/sqlitebrowser/releases)
打开,发现是可以浏览相关的历史记录的。如图1:
![](./_image/Screen Shot 2017-10-20 at 11.41.08.png)
看来是把 历史记录分成了两个表,于是左联一下就可以实现。但有个问题是访问时间一直是 529847145.593902
这种奇怪的东西,不是 unixtimestamp,然后搜索一下发现是以 2001-01-01 00:00:00 为起点计算 timestamp,于是用 JavaScript 写了个转换:
1 | // 2017 年 10月 16 日 |
算出了两个时间区间,然后写下 SQL:
1 | select title, url from history_visits left join history_items on history_visits.history_item = history_items.id where visit_time < 529891200 and visit_time > 529804800; |
看起来跟我在 Safari 的数据是一致的,于是就导出 CSV 格式,算是顺利完成。
保存到待读列表
1 | toread () { |
然后执行 toread http://xxx.xxx
就可以添加到 Safari 的待读列表了,可以自己写个批处理。
总结
其实在 ~/Library/Safari
目录下有 CloudTabs.db ,可以直接导出,不需要在 Safari 重新打开。
解决这种级别的问题,如丝般顺滑。