У меня всего миллиард элементов в списке чтения Safari, и мне нужны ссылки на все из них.
Есть ли способ получить все элементы в вашем списке для чтения в виде ссылок (возможно, в текстовом документе)?
Я набросал скрипт Python, чтобы прочитать файл plist, на который есть ссылка в вопросе, упомянутом в комментариях .
#!/usr/bin/env python
import plistlib
from shutil import copy
import subprocess
import os
from tempfile import gettempdir
import sys
import atexit
BOOKMARKS_PLIST = '~/Library/Safari/Bookmarks.plist'
bookmarksFile = os.path.expanduser(BOOKMARKS_PLIST)
# Make a copy of the bookmarks and convert it from a binary plist to text
tempDirectory = gettempdir()
copy(bookmarksFile, tempDirectory)
bookmarksFileCopy = os.path.join(tempDirectory, os.path.basename(bookmarksFile))
def removeTempFile():
os.remove(bookmarksFileCopy)
atexit.register(removeTempFile) # Delete the temp file when the script finishes
converted = subprocess.call(['plutil', '-convert', 'xml1', bookmarksFileCopy])
if converted != 0:
print "Couldn't convert bookmarks plist from xml format"
sys.exit(converted)
plist = plistlib.readPlist(bookmarksFileCopy)
# There should only be one Reading List item, so take the first one
readingList = [item for item in plist['Children'] if 'Title' in item and item['Title'] == 'com.apple.ReadingList'][0]
if 'Children' in readingList:
for item in readingList['Children']:
print item['URLString']
Скопируйте и вставьте это в файл, назовите его что-то вроде readinglisturls.py
. Затем сделайте его исполняемым, запустив chmod +x readinglisturls.py
в Терминале. Затем вы можете запустить его в терминале, и он распечатает любые URL-адреса списка чтения. Если вам нужны URL-адреса в файле, вы можете перенаправить вывод в файл, запустив /path/to/readinglisturls.py > myfile.txt
в Терминале.
Другой вариант с использованием драгоценного камня plist Ruby:
sudo gem install plist;plutil -convert xml1 -o - ~/Library/Safari/Bookmarks.plist|ruby -rubygems -e 'require "plist";puts Plist.parse_xml(STDIN.read)["Children"].select{|e|e["Title"]=="com.apple.ReadingList"}[0]["Children"].map{|e|e["URLString"]}'
Или, если у вас нет других закладок:
defaults read ~/Library/Safari/Bookmarks.plist | sed -En 's/^ *URLString = "(.*)";/\1/p'
Вот версия, использующая язык программирования Factor , которая немного проще, чем версия Python, на которую уже ответили в этом посте:
: reading-list ( -- urls )
"~/Library/Safari/Bookmarks.plist" read-plist
"Children" of [ "Title" of "com.apple.ReadingList" = ] find nip
"Children" of [ "URLString" of ] map ;
Более подробная информация доступна в этом сообщении в блоге .
без холма
Синий лед
без холма