从 Shell 脚本中按标题键删除 Plist 字典项

从 Shell 脚本中按标题键删除 Plist 字典项

我正在尝试创建一个 shell 脚本,该脚本将使用 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. 按照上述方法按索引号删除。

虽然我不确定从哪里开始,但我很确定PlistBuddyplutildefaults read没有搜索、计算和返回值的功能。

谢谢,任何建议都将不胜感激,过去几个小时我一直在搜索和测试技术,但没有任何运气。

相关内容