История Safari исчезает, несмотря на настройки

Мне нравится, когда история моего браузера охватывает годы назад, чтобы я мог посмотреть на вещи, которые, возможно, интересовали меня давным-давно. Чтобы реализовать это желание, я настроил Safari на удаление элементов истории «вручную» на Generalвкладке в файле Preferences. Я сделал то же самое для элементов списка загрузки. Моим намерением было (и есть) никогда не удалять элементы истории и не позволять Safari делать это автоматически.

Это, казалось, работало нормально какое-то время, и у меня все еще есть история, которая насчитывает более года. Однако недавно я заметил, что самые старые дни в моей истории исчезают. Сначала я не был уверен, но после проведения некоторых тестов я уверен. Кажется, что это происходит случайно и нечасто. Я думаю, что окно Safari также теряет фокус, когда это происходит.

Я не уверен, как и почему это происходит. Единственное, о чем я могу думать, это о том, что в самом Safari может быть какое-то жестко запрограммированное ограничение. Или, возможно, он очищает старые элементы истории, когда достигает предела памяти.

Я вижу, что мой History.dbфайл на lsвыходе составляет 80 МБ:

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

Является ли 80 МБ каким-то неявным ограничением для Safari?

Другой неприятный аспект этой проблемы заключается в том, что я не могу экспортировать свою историю Safari в другой браузер. И Chrome, и Firefox отказываются импортировать что-либо из Safari, кроме закладок. Кроме того, у меня не так много резервных копий моей истории Safari. Хотя резервные копии в любом случае не слишком помогут, поскольку в резервной копии не будет моей недавней истории.

Итак, как я могу заставить Safari перестать терять мои самые старые элементы истории?

Некоторая информация об окружающей среде:

Моя версия Safari в настоящее время 11.0.2 на macOS 10.13.2. Кроме того, я не использую интеграцию iCloud с Safari.

РЕДАКТИРОВАТЬ:

Во время вознаграждения за этот вопрос я также рассмотрю возможность принятия ответов, которые предлагают способ экспортировать мою историю в другой браузер (предпочтительно Firefox или Chrome).

Вы проверили любой подобный вопрос здесь? Например: apple.stackexchange.com/q/178969/237687
@SolarMike Да, я искал подобные вопросы здесь и в других местах. Как ни странно, я наткнулся на этот вопрос, на который вы ссылались, после того , как разместил свой вопрос здесь. Я не мог найти его, прежде чем опубликовать свой вопрос здесь, и я попытался применить некоторые советы в комментариях к этому вопросу. А именно, я запустил: defaults write ~/Library/Preferences/com.apple.Safari.plist HistoryAgeInDaysLimit 999999. Я еще не уверен, что это сработает, особенно. так как этот совет не был принятым ответом.
Аналогичный вопрос был задан с предложением сценария хрона для хранения каждого дня / недели, скопированного в отдельный файл в качестве резервной копии ... не могу найти его в данный момент.
@SolarMike Это интересная идея. Я, конечно, хотел бы узнать больше об этом.
Ну поищите, может найдете раньше меня...
@SolarMike Я не нашел предложения о cron, но могу подтвердить, что совет в вопросе, на который вы ссылались, не работает. Я все еще теряю историю даже после HistoryAgeInDaysLimitустановки 999999.
Насколько я могу судить, если вы синхронизируете историю Safari в iCloud, ваша история macOS будет усечена, чтобы соответствовать меньшему ограничению размера, установленному любыми другими устройствами (например, iOS), которые повторно синхронизируются. Это, конечно, не имеет смысла, но, похоже, так и происходит.

Ответы (2)

Это ограничение размера, установленное Safari .

База данных sqlite, очевидно, может быть больше 80M; он ограничен только объемом доступного места для хранения, но технически он имеет верхний предел размера файла около 140 ТБ.

Другие разработчики отметили, что в (более старых версиях) Safari ограничение ограничено 50 ГБ . Разумно предположить, что это ограничение было увеличено в последующих выпусках macOS/iOS/Safari.

Также само собой разумеется, что это ограничение на размер налагается (Apple) Safari, потому что по умолчанию он настроен на синхронизацию с iCloud с другими устройствами Apple, многие из которых ограничены доступностью хранилища (например, iPhone и iPad).

Мы также знаем, что базовый (бесплатный) объем хранилища iCloud составляет 5 ГБ, и это должно учитывать гораздо больше, чем история просмотров. Для таких вещей, как файлы, настройки, резервные копии устройств (где применимо), цепочки для ключей, заметки и т. д., должно быть выделено место. Синхронизация этих элементов установлена ​​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. Но если лучшего ответа не появится, я думаю, что это будет лучший.
Что ж, я только что попробовал ваш скрипт, так как новых ответов не появилось. Странно, вроде не работает. Результирующий history.txtфайл полностью пуст.
Если вы вручную введете команду выбора sqlite3, вы что-нибудь увидите?
Нет, когда я это делаю, тоже ничего не выходит.
Просто чтобы мы были на одной странице.... sqlite3 History.db, тогда select * from history_items;дайте мне знать, что вы получите.
Это дает массивный дамп моих элементов истории.
Надо будет посмотреть, когда вернусь, так как сейчас сижу на айфоне и не могу проверить
Аллан, мне жаль, что срок действия награды истек до того, как я получил возможность присудить тебе все очки. Вы получили половину награды, но я не знал, должен ли я дать вам всю сумму, так как ваш сценарий еще не работает. Я извиняюсь, так как у меня также были семейные чрезвычайные ситуации, и я не мог быть более внимательным к тому, чтобы заставить ваш сценарий работать. Я дам вам голос за все ваши усилия, и я очень надеюсь, что мы сможем заставить ваш сценарий работать, чтобы я мог, по крайней мере, иметь более рабочий формат для моей истории. Пожалуйста, предложите еще какие-либо советы, если это возможно; Я приму ваш ответ, как только ваш скрипт заработает.
Я думаю, что у меня есть ключ к тому, что происходит с вашим скриптом SQL. Похоже, в моей таблице нет urlэлемента . history_visitsЯ использовал DB Browser для SQLite , чтобы проверить базу данных и выяснить это.
Аллан, вы планируете продолжить рассмотрение этого вопроса? Я был бы признателен за дальнейшую помощь, так как я не совсем уверен, в чем проблема, и мне бы очень хотелось, чтобы моя история Safari была извлечена как можно скорее.
Извините за задержку - большую часть недели я болел гриппом, из-за чего я на неделю отстал от всех своих других проектов. Мне понадобилась целая вечность, чтобы вернуться в норму во всем. Я ввел неправильное имя поля в selectкоманде. Попробуй это сейчас. Я только что протестировал его, и он работает нормально.
Очень сожалею о вашем гриппе! Там, где я живу, он тоже бродит, и с этим, безусловно, неприятно иметь дело. Кроме того, ваш новый набор команд отлично работает, и теперь у меня есть рабочий history.txtфайл! Большое спасибо!

Простой ответ, нет, вы не можете.

Я предлагаю вам использовать Chrome и импортировать данные, выполнив следующие действия:

  1. установить и запустить Chrome (закрыть Safari)
  2. Нажмите на 3 точки в правом верхнем углу
  3. Перетащите курсор на «Закладки», затем нажмите «Импортировать закладки и настройки».
  4. Вы увидите 4 опции: Выберите элементы для импорта: «История просмотров», «Избранное/Закладки», «Сохраненные пароли», «Поисковые системы».
Это все, что я вижу , когда пытаюсь импортировать данные из Safari в Chrome.
Не могли бы вы уточнить, как это отвечает на вопрос?
1. На данный момент Chrome не может импортировать историю Safari. 2. Chrome также удаляет историю старше 90 дней. 3. Лучшей альтернативой является FF, который дает пользователю возможность установить дату/номер истечения срока действия superuser.com/questions/1635171/… , но это бесполезно для этого вопроса.
Спасибо, Шерлок; Вы опоздали на обсуждение на три года.