Excluindo um Item de Dicionário de Plist por Chave de Título do Shell Script

1

Estou tentando criar um script de shell que excluirá uma pasta de nível superior dos Favoritos do Safari usando o arquivo Bookmarks.plist do Safari pelo nome da pasta. Infelizmente, o único método que eu encontrei para excluir o item do dicionário com PlistBuddy ou plutil é pelo número do índice.

Aqui está a estrutura básica:

<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>

Desejo excluir todo o item do dicionário na primeira matriz com o Title value Delete This Folder , pois os itens e os números de índice podem mudar o tempo todo.

Eu posso excluir este item por índice com sucesso de algumas maneiras, incluindo:

PlistBuddy:

PlistBuddy -c "delete :Children:5" /Users/myuser/Library/Safari/Bookmarks.plist

plutil:

plutil -remove Children.5 /Users/myuser/Library/Safari/Bookmarks.plist

Mas eu não encontrei a sintaxe correta - se é que é possível - para excluir pelo título com qualquer um desses utilitários, nem encontrei outro utilitário de linha de comando que possa fazê-lo.

Como alternativa, não estou disposto a um processo de duas etapas:

  1. Consulte o arquivo plist para localizar o título e retornar o número do índice.
  2. Excluir por número de índice como acima.

Não sei ao certo por onde começar com isso e tenho certeza de que PlistBuddy , plutil e defaults read não têm a capacidade de pesquisar, contar e retornar o valor para mim.

Obrigado, qualquer recomendação seria muito apreciada, tenho procurado e testado técnicas nas últimas horas sem qualquer sorte.

    
por Chris White 22.06.2018 / 06:23

0 respostas