尽管进行了设置,Safari历史记录仍然消失


8

我喜欢拥有多年的浏览器历史,因此我可以研究很久以前对我感兴趣的事物。为了实现这一愿望,我将Safari设置为“手动”删除的General标签下的历史记录项Preferences。对于下载列表项,我做了同样的事情。我的意图是(并且过去)永远不会删除历史记录项,并阻止Safari自动执行此操作。

这似乎工作了一段时间,但我仍然有可以追溯到一年多以前的历史。但是,我最近注意到历史上最古老的日子正在消失。起初我不确定,但是经过一些测试后,我确定。它似乎是随机发生的,很少出现。我认为Safari窗口在发生时也会失去焦点。

我不确定这是如何发生或为什么发生。我唯一想到的是Safari本身可能存在一些硬编码限制。或者,当达到内存限制时,它会清除旧的历史记录项。

History.dbls输出中看到我的文件是80MiB :

  -rw-r--r--    1 my_username staff  80M Dec 29 13:02 History.db

80MiB是Safari的某种隐式限制吗?

此问题的另一个令人困扰的方面是我无法将Safari历史记录导出到另一个浏览器。Chrome和Firefox都拒绝从Safari导入除书签之外的任何内容。而且,我没有很多Safari历史记录的备份。虽然,备份仍然无济于事,因为备份将缺少我最近的历史记录。

那么,如何才能使Safari停止丢失我最古老的历史记录呢?

一些环境信息:

我的Safari版本当前在macOS 10.13.2上为11.0.2。另外,我没有将iCloud与Safari集成在一起。

编辑:

在悬赏此问题时,我还将考虑接受答案,这些答案提供了将我的历史记录导出到另一个浏览器(最好是Firefox或Chrome)的方法。


您在这里检查任何类似的问题吗?例如:apple.stackexchange.com/q/178969/237687
太阳麦克(Mike Solar)

@SolarMike是的,我已经在这里和其他地方寻找类似的问题。有趣的是,我在此处发布问题,偶然发现了您所链接的问题。在将问题发布到此处之前,我找不到它,并且我尝试在该问题的评论中应用一些建议。即,我已经运行:defaults write ~/Library/Preferences/com.apple.Safari.plist HistoryAgeInDaysLimit 999999。我不确定这是否行得通,特别是。因为此建议不是公认的答案。
GDP2

有人提出了一个类似的问题,建议使用chron脚本来存储每天/每周复制到单独文件中作为备份...目前无法找到它。
太阳迈克

@SolarMike这是一个有趣的想法。我当然想了解更多。
GDP2

好吧,进行搜索您可能会在我之前找到它
太阳迈克

Answers:


4

这是Safari施加的大小限制。

一个sqlite数据库显然可以大于80M;它仅受可用存储空间量的限制,但从技术上讲,其文件大小上限约为140TB

其他开发人员指出,在Safari(旧版)中,该限制上限为50GB。可以合理地假设此限制在随后的macOS / iOS / Safari版本中已增加。

也有理由认为,此大小限制是由(Apple)Safari施加的,因为默认情况下,它被配置为与iCloud同步到其他Apple设备,其中许多设备受存储可用性的限制(例如,iPhone和iPad)。

我们也知道iCloud的基本(免费)存储空间为5GB,这比浏览历史记录所占的空间要大得多。必须为文件,设置,设备备份(如适用),钥匙串,注释等内容分配空间。这些项目的同步由Apple默认设置。

允许无限的历史记录History.db超过iCloud / iPad / iPhone的容量并没有多大意义。

即使您没有使用iCloud集成,普通用户也会这样做,Apple会在此前提下设计其产品并相应地设计其产品。

提取历史

您可以History.db使用此(非常)简单的sqlite3脚本从文件中提取历史记录项

创建一个“ commands.txt”文件,并使用以下命令填充该文件:

.mode csv
.once history.txt
select visit_time, title, url from history_visits inner join history_items on history_items.id = history_visits.history_item;

然后发出命令

sqlite3 History.db < commands.txt

这将创建一个名为CSV文件,history.txt其中包含历史记录项的时间,标题和URL。这假定您在~/Library/Safari目录中。请记住,您的历史记录项目的日期/时间将以纪元时间(尽管在这种情况下纪元是不同的),并且需要最终进行转换。


这是有用的信息,很高兴知道此限制是Safari故意施加的。至少这不是一些疯狂的错误。但是,我仍然希望有一种方法可以解决此限制,以便仍然可以使用Safari。但是,如果没有更好的答案出现,我想这将是最好的答案。
GDP2

好吧,由于没有新的答案出现,我只是尝试了您的脚本。奇怪的是,它似乎不起作用。结果history.txt文件完全为空。
GDP2

如果您在其中手动输入select命令,sqlite3您会看到什么吗?
艾伦(Allan)'18年

不,当我这样做时也没有输出。
GDP2

就是这样,我们在同一页面上...。sqlite3 History.db,然后select * from history_items; 让我知道您得到了什么。
艾伦(Allan)'18年

1

简单的答案,不,你不能。

建议您使用Chrome并通过以下步骤导入数据:

  1. 安装并启动Chrome(关闭Safari)
  2. 单击右上角的3个点
  3. 将光标拖动到“书签”,然后单击“导入书签和设置”
  4. 您将看到4个选项,即选择要导入的项目:“浏览历史记录”,“收藏夹/书签”,“保存的密码”,“搜索引擎”

这是我所看到的,当我尝试导入的东西从Safari浏览器Chrome浏览器。
GDP2

您能否详细说明这是如何回答问题的?
nohillside
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.