Tùy thuộc vào điều kiện tiên quyết, rằng tất cả các đối tượng của bạn được nhóm lại và không được kết hợp thành các nhóm lớn hơn, đây là cách thực hiện. (Tôi đã sử dụng mèo trong ví dụ, vì chó không có sẵn).
Ở phía dưới bên phải, bạn thấy một con mèo được tô sáng, đối tượng id 5358, là một đường dẫn duy nhất, vì vậy tôi đã thêm một tầng màu xanh lá cây sau đó đã thay đổi nó thành đối tượng 5364 sẽ xảy ra sau đó, vì vậy đừng nhầm lẫn với bạn. :)
Bạn nhận được trình soạn thảo xml bằng cách nhấn nút 4 từ bên phải (mũi tên 1).
Tôi đã thay đổi g5353 thành g-cat-5358 (trường 4) để giúp texttool dễ dàng chọn các đối tượng này hoạt động cho hầu hết các thành phần không va chạm với tên xml-svg (màu, meta, id, ... ).
Trong cửa sổ bên trái mà bạn thấy, đã có một thực thể được đổi tên, g-cat-5312 gần với đỉnh ở cùng mức thụt đầu dòng.
Inkscape tổ chức các id duy nhất cho các nhóm, nhưng chúng không cần phải ở dạng gNUMBER, bạn có thể trộn các ký tự khác. Chỉ cần không chọn một định danh đã tồn tại.
Sau khi thay đổi mã định danh, nhấn 'setzen (set)' (5) để xác nhận thay đổi của bạn. Bạn thấy một giao diện tiếng Đức ở đây, YMMV.
Lưu Svg (dưới dạng demo-cat.svg). Bây giờ chúng tôi chuyển sang kịch bản.
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
Nó làm gì? Nó greps (tìm kiếm bằng grep) cho mẫu "g-cat-" là phần bắt đầu của phần thú vị của chúng tôi.
id=${cat//[^0-9]/}
trích xuất id trong bash từ biểu thức. Echo in nó ra màn hình sẽ giúp tìm ra lỗi nếu có sự cố. head -n 53 demo-cat.svg lấy 53 dòng đầu tiên từ svg, trong đó có tất cả các Svg-cái nồi. Tùy thuộc vào cài đặt của bạn với các định dạng svg khác nhau (inkscape, nén, svg bình thường, inkscape-nén), điều này có thể khác nhau. Với nl demo-cats.svg | less
bạn có thể n umerate các l ines, để tìm điểm cắt đúng trong trường hợp của bạn.
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<g
^ Đến phần này, các dòng nên được bao gồm.
Lệnh tiếp theo được thực hiện với s tream ed itor sed: sed -n "/$cat/,/^ <\/g>/p" demo-cats.svg;
nói (-n) không in (nhưng) tìm kiếm nhóm mèo, cho đến thẻ đóng g ở mức 2 thụt vào trước 4 khoảng trống </g>
nếu bạn không thay đổi tùy chọn Inkscape mà bạn có thể nhớ nếu đã làm. Sau đó thêm thẻ đóng cho svg : echo "</svg>"
. Viết đầu ra cho tệp 'cat- $ id.svg' (phần này ghi đè lên các tệp hiện có).
Vì vậy, tôi kết thúc với hai tệp: cat-5312.svg và cat-5364.svg.
Một giải pháp thanh lịch hơn nên có thể với xmlstarlet hoặc các công cụ tương tự, được thực hiện để tìm kiếm và chỉnh sửa các tệp xml. Thật không may, tôi không quen với nó và đã không làm cho nó hoạt động sau khi đọc 10 phút tài liệu. Bạn sẽ không cần phải đổi tên các nhóm ngay từ đầu.