Löschen eines Plist-Dictionary-Elements nach Titelschlüssel aus Shell-Skript

398
Chris White

Ich versuche, ein Shell-Skript zu erstellen, das einen Ordner der obersten Ebene aus Safari-Lesezeichen löscht, indem die Safaris.plist-Datei von Safari nach Ordnernamen verwendet wird. Leider ist die einzige Methode, die ich gefunden habe, um das Wörterbuchelement mit PlistBuddy oder Plutil zu löschen, die Indexnummer.

Hier ist die Grundstruktur:

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

Ich möchte das gesamte Wörterbuchelement im ersten Array mit dem TitleWert löschen, Delete This Folderda sich die Elemente und Indexnummern jederzeit ändern können.

Ich kann dieses Element auf verschiedene Weise erfolgreich nach Index löschen, einschließlich:

PlistBuddy:

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

plutil:

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

Aber ich habe nicht die richtige Syntax gefunden - wenn überhaupt möglich -, um mit einem dieser Dienstprogramme nach Titel zu löschen, noch habe ich ein anderes Befehlszeilenprogramm gefunden, das dies tun kann.

Alternativ bin ich nicht an einen zweistufigen Prozess gebunden:

  1. Fragen Sie die Plist-Datei ab, um den Titel und die Rückkehrindexnummer zu finden.
  2. Durch Indexnummer wie oben löschen.

Ich bin mir nicht sicher, wo ich damit anfangen soll, und ich bin mir ziemlich sicher PlistBuddy, plutilund defaults readich habe nicht die Möglichkeit, den Wert für mich zu suchen, zu zählen und zurückzugeben.

Vielen Dank, alle Empfehlungen wären sehr dankbar. Ich habe in den letzten Stunden ohne viel Glück gesucht und gesucht.

1

0 Antworten auf die Frage