1 votes

Convertissez par lots des images d'un format à un autre en conservant la structure du répertoire et en supprimant les originaux.

J'ai regardé cette question et bien que cela fonctionne, il y a quelques problèmes :

  1. Toutes les images converties sont placées dans le répertoire à partir duquel la commande est appelée.
  2. Les images originales sont conservées.

Je dois convertir environ 70 000 fichiers .tif et .jpgs en .pngs. Il est très important que les fichiers convertis soient placés dans leurs répertoires normaux.

Je peux faire un rm par lot des .tff/.jpg à la fin si c'est la meilleure façon de gérer la suppression des anciens fichiers.

3voto

user.dz Points 45060
for f in $(find . -iname "*.jpg" -type f) ;
    do
    convert $f $(dirname $f)/$(basename -s .jpg $f).png ;
    done
  • find . -iname "*.jpg" -type f recherche des fichiers se terminant par ".jpg" sans distinction de casse
  • $(dirname $f) : chemin relatif vers le dossier contenant le fichier $f
  • $(basename -s .jpg $f) : nom de fichier sans le suffixe ".jpg".

Dans les anciennes versions d'Ubuntu, basename doit être exécuté de manière différente :

basename $f .jpg

Convert est une partie d'imagemagick (Comme référence voir Traitement par lots des images tif : Conversion de .tif en .jpeg ) , pour installer

sudo apt-get install imagemagick

0voto

Vijay Points 6526

Cela fonctionne bien aussi pour les noms de fichiers contenant des espaces.

Pour retirer les originaux :

SAVEIFS=$IFS; IFS=$'\n'
for f in $(find . -iname "*.jpg" -type f); do
    convert "$f" "${f%.*}.png"; rm "$f"
done
IFS=$SAVEIFS

Pour conserver les originaux : supprimer la partie < ; rm "$f" >.

SAVEIFS=$IFS; IFS=$'\n'
for f in $(find . -iname "*.jpg" -type f); do
    convert "$f" "${f%.*}.png"
done
IFS=$SAVEIFS

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X