Guten Morgen zusammen!
Wie der Titel schon sagt, will ich mit Inkscape mehrere Bilder konvertieren, die alle in einer Verzeichnisstruktur stecken. Genauer gesagt, sind das alle .svg unterhalb von /usr/share/icons. Dieses habe ich mir in mein /home kopiert, um dort erstmal konvertieren zu können.
Generell ist/wäre das ja kein Problem:
Blöderweise habe ich aber schon bemerkt, dass Inkscape sich bei einigen Bildern aufhängt. Ich will diesen Job über Nacht laufen lassen, und kann einzelne Konvertierungsjobs nicht manuell abbrechen (Es sind ca. 2000 Bilder). Also hatte ich mir schon Folgendes überlegt:
Ich hatte gedacht, so könnte ich hängende Konvertierungs-Jobs killen. Könnte ich wahrscheinlich auch, aber selbst bei schnell konvertierten Bildern wird mit dem Schleifendurchlauf gewartet, bis sleep fertig ist. Das dauert mir verständlicherweise etwas zu lange.
Gestern kam mir dann noch das hier in den Sinn:
Ich denke, dass das vom Ansatz her nicht so falsch ist. Gestern funktionierte das noch ganz gut (Oder ich hab noch dran rumgespielt und erinnere mich nicht) bis auf eine Fehlermeldung, die ich gerade reproduzieren wollte, was aber nicht ging.
Naja, davon abgesehen hätte ich auch gerne noch ein Weiteres "Feature" implementiert, das mir die Namen der Dateien, bei denen inkscape gekillt wurde, in eine Logdatei schreibt.
Pseudo stelle ich mir das insgesamt in etwa so vor:
Geht das mit irgendeiner Bash-internen Funktion oder von mir aus auch einem externen Programm besser als mit sleep?
Wenn nicht, wie bau ich das if-Konstrukt am Besten auf, brauche ich überhaupt eins?
Ich wünsche euch allen einen schönen Tag.
Gruß
Sash
Wie der Titel schon sagt, will ich mit Inkscape mehrere Bilder konvertieren, die alle in einer Verzeichnisstruktur stecken. Genauer gesagt, sind das alle .svg unterhalb von /usr/share/icons. Dieses habe ich mir in mein /home kopiert, um dort erstmal konvertieren zu können.
Generell ist/wäre das ja kein Problem:
Code:
#!/bin/bash
for ICON in `find . -iname '*.svg'`
do
echo "converting picture "$ICON""
inkscape -f "$ICON" --verb=org.inkscape.color.grayscale --verb=FileSave --verb=FileClose
done
Blöderweise habe ich aber schon bemerkt, dass Inkscape sich bei einigen Bildern aufhängt. Ich will diesen Job über Nacht laufen lassen, und kann einzelne Konvertierungsjobs nicht manuell abbrechen (Es sind ca. 2000 Bilder). Also hatte ich mir schon Folgendes überlegt:
Code:
#!/bin/bash
for ICON in `find . -iname '*.svg'`
do
killall sleep
echo "converting picture "$ICON""
inkscape -f "$ICON" --verb=org.inkscape.color.grayscale --verb=FileSave --verb=FileClose & sleep 120 && kill $(pgrep inkscape)
done
Ich hatte gedacht, so könnte ich hängende Konvertierungs-Jobs killen. Könnte ich wahrscheinlich auch, aber selbst bei schnell konvertierten Bildern wird mit dem Schleifendurchlauf gewartet, bis sleep fertig ist. Das dauert mir verständlicherweise etwas zu lange.
Gestern kam mir dann noch das hier in den Sinn:
Code:
#!/bin/bash
for ICON in `find . -iname '*.svg'`
do
killall sleep
echo "converting picture "$ICON""
inkscape -f "$ICON" --verb=org.inkscape.color.grayscale --verb=FileSave --verb=FileClose & sleep 300 &
while [ -n $(pgrep sleep) ]
do
sleep 5
if [[ -n $(pgrep inkscape) ]]; then
if [[ ! -n $(pgrep sleep) ]]; then
kill $(pgrep inkscape)
fi
fi
done
done
Ich denke, dass das vom Ansatz her nicht so falsch ist. Gestern funktionierte das noch ganz gut (Oder ich hab noch dran rumgespielt und erinnere mich nicht) bis auf eine Fehlermeldung, die ich gerade reproduzieren wollte, was aber nicht ging.
Naja, davon abgesehen hätte ich auch gerne noch ein Weiteres "Feature" implementiert, das mir die Namen der Dateien, bei denen inkscape gekillt wurde, in eine Logdatei schreibt.
Pseudo stelle ich mir das insgesamt in etwa so vor:
Code:
for (alle svgs unterhalb von ./icons)
do
versuche 3 Minuten inkscape <parameter>
sonst
schreibe $(ps ax | grep inkscape) mit timestamp in eine Datei
kille den inkscape-prozess
done
Geht das mit irgendeiner Bash-internen Funktion oder von mir aus auch einem externen Programm besser als mit sleep?
Wenn nicht, wie bau ich das if-Konstrukt am Besten auf, brauche ich überhaupt eins?
Ich wünsche euch allen einen schönen Tag.
Gruß
Sash