c’est mon premier article, j’espère que vous aurez l’amabilité de me pardonner si je commets des erreurs de formatage ou autre. C’est une question que je me pose depuis assez longtemps et lorsque je cherche des réponses, j’ai d’autres questions à poser. J'essayais de trouver un moyen de compresser des images dans un dossier en utilisant convert
dans une commande.
D'abord j'ai simplement essayé:
convert * -resize 50% Pic.jpg
Cependant, cela renvoyait les images compressées nommées Pic-0.jpg, Pic-1.jpg, etc. (j'ai aussi essayé $(find ".JPG")
au lieu de *
, mais cela a été étendu de la même manière.
convert * -resize 50% Pic_lorez_{1..3}.jpg
Mais cela semblait prendre les Pic_lorez_2.jpg et Pic3_lorez_3.jpg comme fichiers d'entrée, pas comme fichiers de sortie. Alors, suivant les conseils d'un ami, j'ai essayé:
find . -name "*.JPG" -exec convert {} -resize 50% {} \;
Ceci compresse tous les fichiers sous le même nom mais ne permet pas de mettre le nom que je veux sur ces fichiers (par exemple, Pic_lorez_ {1,2,3,4,5, .. 100} .jpg).
Xargs le rendrait-il possible? Quelque chose dans le genre de:
find . -name "*.JPG" | xargs convert ???
Je ne pouvais pas comprendre la syntaxe appropriée avec xargs. J'ai finalement essayé une conversion directe de converti, mais ce dernier ne semblait pas pouvoir fonctionner de cette façon.
convert
écrit dans un fichier image différent. Pour écraser les fichiers d’image originaux, utilisez mogrify
.
Un seul fichier:
mogrify -resize 50% Pic.jpg
Tous les fichiers .jpg
:
mogrify -resize 50% *.jpg
Vous pouvez utiliser cette doublure: for img in $(ls *.jpg); do convert $img -resize 50% $img;done;
Essaye ça:
SIZE=50 ; find -iname "*.jpg" | while read line ; do NF="$(echo $line | sed -r "s/(\.jpg|\.JPG)/_$SIZE\1/")" ; convert "$line" -resize $SIZE% "$NF" ; done
Ce n'est vraiment pas une ligne. Voici une version en retrait:
SIZE=50
find -iname "*.jpg" | while read line ; do
NF="$(echo $line | sed -r "s/(\.jpg|\.JPG)/_$SIZE\1/")"
convert "$line" -resize $SIZE% "$NF"
done
Vous pouvez ajuster la valeur de SIZE
à n’importe quelle autre taille, en pourcentage.
Veuillez noter qu'après la première exécution, les fichiers déjà convertis seront également considérés comme des fichiers d'entrée. Vous pouvez ignorer des fichiers portant le nom _NUMBER.jpg
en modifiant le paramètre find ou vous pouvez également stocker les fichiers convertis ailleurs.
Ce script le fera pour vous!
Enregistrez-le dans un fichier et rendez-le exécutable avec: chmod +x filename
.
#!/bin/bash SAVEIFS = $ IFS IFS = $ (écho -fr "\ n\b") C = 0; DES = "./"; # Répertoire de destination Pour img dans `find. -maxdepth 1 -mindepth 1 -iname '* .jpg' -type f` do ((++ C)); NF = "$ {DES} Pic_lorez_ $ {C} .jpg "; # Nouveau nom de fichier Convertir $ img -resize 50% $ NF; Terminé # Restaurer $ IFS IFS = $ SAVEIFS
./
par le répertoire dans lequel vous voulez placer les images converties. Par défaut, elles seront placées dans le répertoire actuel.Pic_lorez_
par le nom que vous souhaitez attribuer aux fichiers convertis.Utilisez GNU Parallel:
find -iname "*.jpg" | parallel convert {} -resize 50% {.}_50pct.jpg
et bénéficiez du fait que tous vos cœurs de processeur fonctionnent en parallèle, ce qui accélère le processus.
10 secondes d'installation:
wget pi.dk/3 -qO - | sh -x
Regardez les vidéos d'introduction pour en savoir plus: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1