Я пытаюсь создать сценарий оболочки, который удалит папку верхнего уровня из закладок Safari с помощью файла Bookmarks.plist Safari по имени папки. К сожалению, я нашел единственный способ удалить элемент словаря с помощью PlistBuddy или plutil по номеру индекса.
Вот основная структура:
<dict>
<key>Children</key>
<array>
<dict> ... history ... </dict>
<dict> ... bookmarks bar ... </dict>
<dict> ... bookmarks menu ... </dict>
<dict> ... reading list ... </dict>
<dict> ... folder 1 ... </dict>
<!-- Delete this item -->
<dict>
<key>Sync</key>
<dict>
<key>Data</key>
<data>...</data>
<key>ServerID</key>
<string></string>
</dict>
<!-- By this key/value -->
<key>Title</key>
<string>Delete This Folder</string>
<key>WebBookmarkType</key>
<string>WebBookmarkTypeList</string>
<key>WebBookmarkUUID</key>
<string>21D71C04-F58B-43ED-B02C-7D9A208CCEC0</string>
</dict>
<dict> ... folder 3 ... </dict>
</array>
<dict>...</dict>
<key>Title</key>
<string></string>
<key>WebBookmarkFileVersion</key>
<integer>1</integer>
<key>WebBookmarkType</key>
<string>WebBookmarkTypeList</string>
<key>WebBookmarkUUID</key>
<string>892D35B5-DD40-418F-83D3-7AB77C2D9C03</string>
</dict>
</plist>
Я хочу удалить весь элемент словаря в первом массиве со значением Title
Delete This Folder
поскольку элементы и номера индексов могут меняться все время.
Я могу удалить этот элемент по индексу успешно несколькими способами, в том числе:
PlistBuddy:
PlistBuddy -c "delete :Children:5" /Users/myuser/Library/Safari/Bookmarks.plist
plutil:
plutil -remove Children.5 /Users/myuser/Library/Safari/Bookmarks.plist
Но я не нашел правильный синтаксис - если это вообще возможно - удалить по названию с помощью одной из этих утилит, и я не нашел другой утилиты командной строки, которая может это сделать.
В качестве альтернативы, я не привязан к двухэтапному процессу:
- Запросите файл plist, чтобы найти заголовок и номер индекса возврата.
- Удалить по номеру индекса, как указано выше.
Я не уверен, с чего начать, хотя и уверен, что PlistBuddy
, plutil
и reads по defaults read
не имеют возможности поиска, подсчета и возврата значения для меня.
Спасибо, любые рекомендации будут с благодарностью, я искал и тестировал методы в течение последних нескольких часов без какой-либо удачи.