2017-07-17 4 views
1

Je dois convertir de svg en png toutes les images dans un dossier. Disons que les images s'appellent test1.svg, test2.svg, ..., testn.svg. En utilisant le script suivant:Convertir un tas d'images de svg à png

for i in *.svg 
do 
    convert "$i" PNG24:"$i".png 
done 

fait le travail correctement, et les images sont appelées test1.svg.png, test2.svg.png, ..., testn.svg.png. Mes questions sont:

1) Est-il possible de faire que les images de sortie soient appelées test1.png, test2.png, ..., testn.png, en supprimant essentiellement la partie 'svg' du nom?

2) Est-il possible de les envoyer directement dans un autre répertoire?

Merci!

Répondre

3

Oui. Vous pouvez faire un autre répertoire et les envoyer là-bas comme ceci:

mkdir other 
for i in *.jpg; do 
    convert "$i" PNG24:other/"${i%jpg}png" 
done 

Si vous avez beaucoup d'images à faire, et vous êtes sur macOS ou Linux, je recommande GNU Parallel pour obtenir le travail fait plus rapidement:

mkdir other 
parallel convert {} PNG24:other/{.}.png ::: *jpg 
+0

Neat. La partie parallèle me semble fantastique. Merci beaucoup! – TheRevanchist

+0

C'est un outil génial si vous avez beaucoup de choses à faire et que vous voulez utiliser tous ces jolis processeurs Intel que vous avez payés et qui normalement restent inactifs. Essayez d'ajouter '--progress' ou' --bar' pour voir la progression. Vous pouvez aussi utiliser '--dry-run' pour voir ce qu'il ferait avec quoi que ce soit. 10 minutes passées ici valent la peine https://www.gnu.org/software/parallel/parallel_tutorial.html Bonne chance pour votre projet. –

+0

Mark Setchell: Merci pour l'astuce à propos de $ {string% substring} \t Dénudez la plus courte chaîne de $ substring à partir de $ string. Dans ImageMagick, j'avais l'habitude de faire: name = $ (convertir -ping $ -format "% t" info :) pour supprimer le suffixe. Maintenant, je peux juste faire name = $ {file%. *} – fmw42