Abhängig von der Voraussetzung, dass alle Ihre Objekte gruppiert und nicht selbst zu größeren Gruppen zusammengefasst werden, gehen Sie wie folgt vor. (Ich habe im Beispiel Katzen verwendet, weil Hunde nicht verfügbar waren).
Unten rechts sehen Sie eine hervorgehobene Katze, Objekt-ID 5358, die ein einzelner Pfad ist. Daher habe ich später einen grünen Boden hinzugefügt, der ihn in Objekt 5364 geändert hat, das später auftreten wird. Lassen Sie sich also nicht verwirren. :) :)
Sie erhalten den XML-Editor, indem Sie auf die Schaltfläche 4 von rechts klicken (Pfeil 1).
Ich habe g5358 in g-cat-5358 (Feld 4) geändert, um es einem Texttool zu erleichtern, diese Objekte auszuwählen. Dies funktioniert für die meisten Elemente, die nicht mit XML-SVG-Namen kollidieren (Farbe, Meta, ID, ... ).
Im linken Fenster sehen Sie, dass es bereits eine umbenannte Entität gibt, g-cat-5312, die sich oben auf derselben Einrückungsstufe befindet.
Inkscape organisiert eindeutige IDs für Gruppen, diese müssen jedoch nicht die Form gNUMBER haben. Sie können auch andere Zeichen mischen. Wählen Sie einfach keine bereits vorhandene Kennung aus.
Nachdem Sie die Kennung geändert haben, drücken Sie 'setzen (set)' (5), um Ihre Änderung zu bestätigen. Sie sehen hier eine deutsche Schnittstelle, YMMV.
Speichern Sie die SVG (als demo-cats.svg). Wir wechseln jetzt zu Scripting.
for cat in $( grep g-cat- demo-cats.svg )
do
id=${cat//[^0-9]/}
echo $id
(head -n 53 demo-cats.svg; sed -n "/$cat/,/^ <\/g>/p" demo-cats.svg; echo "</svg>" ) > cat-${id}.svg
done
Was tut es? Es sucht (mit grep suchen) nach dem "g-cat-" Muster, das der Beginn unseres interessanten Abschnitts ist.
id=${cat//[^0-9]/}
extrahiert die ID in Bash aus dem Ausdruck. Echo druckt es auf dem Bildschirm aus, um den Fehler zu finden, wenn etwas schief geht. head -n 53 demo-katzen.svg nimmt die ersten 53 Zeilen aus dem svg, das alle svg-boilerplate enthält. Abhängig von Ihren Einstellungen mit verschiedenen SVG-Formaten (inkscape, komprimiert, normales SVG, inkscape-komprimiert) kann dies variieren. Mit nl demo-cats.svg | less
Sie können n die umerate l ines, den richtigen Schnittpunkt in Ihrem Fall zu finden.
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<g
^ Bis zu diesem Teil sollten die Zeilen enthalten sein.
Der nächste Befehl wird mit dem fertig s tream ed itor sed: sed -n "/$cat/,/^ <\/g>/p" demo-cats.svg;
sagt (-n) kein Druck (aber) searche für die Katze Gruppe zu dem schließenden Tag g bei Einrückungsebene bis 2, 4 Leerzeichen vor dem ist , </g>
wenn Sie nicht Ändern Sie die Inkscape-Einstellungen, an die Sie sich möglicherweise erinnern, wenn Sie dies getan haben. Fügen Sie dann das schließende Tag für svg hinzu : echo "</svg>"
. Schreiben Sie die Ausgabe in die Datei 'cat- $ id.svg' (dies überschreibt stillschweigend vorhandene Dateien).
Am Ende habe ich zwei Dateien: cat-5312.svg und cat-5364.svg.
Eine elegantere Lösung sollte mit xmlstarlet oder ähnlichen Tools möglich sein, mit denen XML-Dateien durchsucht und bearbeitet werden können. Leider bin ich nicht daran gewöhnt und habe es nach 10 Minuten Dokumentation nicht zum Laufen gebracht. Sie müssten die Gruppen am Anfang nicht umbenennen.