1

Я пытаюсь создать сценарий оболочки, который удалит папку верхнего уровня из закладок 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

Но я не нашел правильный синтаксис - если это вообще возможно - удалить по названию с помощью одной из этих утилит, и я не нашел другой утилиты командной строки, которая может это сделать.

В качестве альтернативы, я не привязан к двухэтапному процессу:

  1. Запросите файл plist, чтобы найти заголовок и номер индекса возврата.
  2. Удалить по номеру индекса, как указано выше.

Я не уверен, с чего начать, хотя и уверен, что PlistBuddy , plutil и reads по defaults read не имеют возможности поиска, подсчета и возврата значения для меня.

Спасибо, любые рекомендации будут с благодарностью, я искал и тестировал методы в течение последних нескольких часов без какой-либо удачи.

0