Comment convertir récursivement et automatiquement tous les bmps en pngs dans un répertoire donné?

J’ai un répertoire sur ma machine avec des centaines d’images, environ la moitié de ces images sont des bmp, et l’autre moitié sont des pngs … Je dois transformer tous les bmp en pngs, mais comme il y en a tellement Je ne veux pas le faire manuellement.

Alors, comment puis-je convertir récursivement et automatiquement (probablement à l’aide d’un script) tous les fichiers image bmp en fichiers image png dans ce répertoire?

J’utilise Ubuntu GNOME 15.10 avec GNOME 3.18.

Une simple boucle for peut suffire pour un seul répertoire:

 for i in *.bmp do convert $i "${i%.bmp}.png" done 

Pour rendre cela vraiment récursif, il y a quelques choix, une méthode est la suivante:

 find . -name '*.bmp' -type f -exec bash -c 'convert "$0" "${0%.bmp}.png"' {} \; 

Si vous souhaitez en savoir plus, spécifiez un niveau de qualité pour le niveau png en utilisant la syntaxe:

 -quality value 

Cela prend une valeur de 1 pour la qualité la plus basse et la plus petite taille de fichier à 100 pour la plus grande qualité et la plus grande taille de fichier. La valeur par défaut est environ 92. Plus de détails ici …

Je dirais que la réponse de andrew.46 est toujours la meilleure, étant donné que c’est un éloquent on-line. Cependant, voici une autre option. Le seul avantage est qu’il existe un “nombre de fichiers en cours” sur le “nombre total de fichiers” à convertir, et que le fichier en cours de conversion est répercuté. Vous voudrez cependant supprimer les espaces dans les noms de fichiers avant de les exécuter. Cela supprimera des espaces: find . -name "* *" | rename 's/ /-/g' find . -name "* *" | rename 's/ /-/g'

 #!/bin/bash cd $(pwd) bmp_files=$(find . -iname "*.bmp") total=$(echo "$bmp_files" | wc -l) num=0 echo "There are $total files to be converted." for f in $bmp_files do ((num++)) echo "Converting $f, $num/$total" convert "$f" "${f%.bmp}.png" clear done