En fonction de la condition préalable, que tous vos objets soient regroupés et non pas eux-mêmes regroupés en plus grands groupes, voici comment procéder. (J'ai utilisé des chats dans l'exemple, car les chiens n'étaient pas disponibles).
En bas à droite, vous voyez un chat en surbrillance, l'objet id 5358, qui est un seul chemin, j'ai donc ajouté un sol vert plus tard qui l'a changé en l'objet 5364 qui se produira plus tard, alors ne vous laissez pas confondre. :)
Vous obtenez l'éditeur xml en appuyant sur le bouton 4 depuis la droite (flèche 1).
J'ai changé g5358 en g-cat-5358 (champ 4) pour qu'il soit facile pour un outil de texte de choisir ces objets qui fonctionnent pour la plupart des éléments qui n'entrent pas en collision avec les noms xml-svg (couleur, méta, id, ... ).
Dans la fenêtre de gauche, vous voyez qu'il existe déjà une entité renommée, g-cat-5312 près du sommet au même niveau d'indentation.
Inkscape organise des identifiants uniques pour les groupes, mais ils n'ont pas besoin d'être de la forme gNUMBER, vous pouvez mélanger d'autres caractères. Ne choisissez tout simplement pas un identifiant déjà existant.
Après avoir changé l'identifiant, appuyez sur 'setzen (set)' (5) pour confirmer votre changement. Vous voyez une interface allemande ici, YMMV.
Enregistrez le svg (comme demo-cats.svg). Nous passons maintenant aux scripts.
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
Qu'est ce que ça fait? Il greps (recherche avec grep) pour le motif "g-cat-" qui est le début de notre section intéressante.
id=${cat//[^0-9]/}
extrait l'id dans bash de l'expression. Echo l'imprime à l'écran, ce qui devrait aider à trouver le bogue en cas de problème. head -n 53 demo-cats.svg prend les 53 premières lignes du svg, qui contient tous les svg-passe-partout. Selon vos paramètres avec différents formats svg (inkscape, compressé, svg normal, inkscape-compressé), cela peut varier. Avec, nl demo-cats.svg | less
vous pouvez n umer les l ines, pour trouver le bon point de coupe dans votre cas.
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<g
^ Jusqu'à cette partie, les lignes doivent être incluses.
La commande suivante se fait avec le s ed tr ed ed ou sed: sed -n "/$cat/,/^ <\/g>/p" demo-cats.svg;
dit (-n) pas d'impression (mais) recherche pour le groupe cat, jusqu'à la balise de fermeture g au niveau d'indentation 2 qui est 4 espaces avant le </g>
si vous ne l'avez pas modifier les préférences d'Inkscape, dont vous vous souviendrez peut-être si vous l'avez fait. Ensuite , ajoutez la balise de fermeture pour svg: echo "</svg>"
. Écrivez la sortie dans le fichier 'cat- $ id.svg' (cela écrase les fichiers existants en silence).
Je me retrouve donc avec deux fichiers: cat-5312.svg et cat-5364.svg.
Une solution plus élégante devrait être possible avec xmlstarlet ou des outils similaires, qui sont faits pour rechercher et éditer des fichiers xml. Malheureusement, je n'y suis pas habitué et je ne l'ai pas fait fonctionner après avoir lu 10 minutes de documentation. Vous n'auriez pas besoin de renommer les groupes au début.