A seconda della condizione preliminare, che tutti i tuoi oggetti siano raggruppati e non combinati in gruppi più grandi stessi, ecco come farlo. (Ho usato i gatti nell'esempio, perché i cani non erano disponibili).
In basso a destra vedi un gatto evidenziato, ID oggetto 5358, che è un singolo percorso, quindi ho aggiunto un piano verde in seguito che lo ha cambiato in oggetto 5364 che si verificherà in seguito, quindi non lasciarti confondere. :)
Ottieni l'editor xml premendo il pulsante 4 da destra (freccia 1).
Ho cambiato g5358 in g-cat-5358 (campo 4) per rendere più semplice la selezione di questi oggetti da parte di uno strumento di testo che funziona per la maggior parte degli elementi che non si scontrano con i nomi xml-svg (color, meta, id, ... ).
Nella finestra di sinistra vedi che esiste già un'entità rinominata, g-cat-5312 vicino alla cima allo stesso livello di rientro.
Inkscape organizza ID univoci per gruppi, ma non devono necessariamente essere nella forma gNUMBER, puoi mescolare altri personaggi. Basta non scegliere un identificatore già esistente.
Dopo aver modificato l'identificatore, premi 'setzen (set)' (5) per confermare la modifica. Qui vedi un'interfaccia tedesca, YMMV.
Salvare lo svg (come demo-cats.svg). Passiamo ora allo 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
Che cosa fa? Greps (cerca con grep) per il modello "g-cat-" che è l'inizio della nostra sezione interessante.
id=${cat//[^0-9]/}estrae l'id in bash dall'espressione. Echo lo stampa sullo schermo che dovrebbe aiutare a trovare il bug se qualcosa va storto. head -n 53 demo-cats.svg prende le prime 53 righe dallo svg, che contiene tutta la svg-boilerplate. A seconda delle impostazioni con diversi formati svg (inkscape, compresso, svg normale, inkscape compresso) questo può variare. Con nl demo-cats.svg | lessè possibile n umerate i l Ines, per trovare il punto di taglio a destra nel tuo caso.
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<g
^ Fino a questa parte, le linee dovrebbero essere incluse.
Il comando successivo viene fatto con il s tream ed itor sed: sed -n "/$cat/,/^ <\/g>/p" demo-cats.svg;dice (-n) senza stampa (ma) searche per il gruppo gatto, fino al tag di chiusura g al livello di rientro 2, che è di 4 spazi prima del </g>se non lo facessi cambia le preferenze di Inkscape, che potresti ricordare se lo facessi. Quindi aggiungere il tag di chiusura per SVG: echo "</svg>". Scrivi l'output nel file 'cat- $ id.svg' (questo sovrascrive i file silenziosamente esistenti).
Quindi finisco con due file: cat-5312.svg e cat-5364.svg.
Una soluzione più elegante dovrebbe essere possibile con xmlstarlet o strumenti simili, creati per cercare e modificare file xml. Purtroppo non ci sono abituato e non ho funzionato dopo aver letto 10 minuti di documentazione. Non avresti bisogno di rinominare i gruppi all'inizio.