logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 26-11-2008 12:06:59

smolski
quasi...modo
Lieu : AIN
Distrib. : backports (buster) 10
Noyau : Linux 4.19.0-8-amd64
(G)UI : gnome
Inscription : 21-10-2008

[Resolu] script bash - reduire fichier .jpg .jpeg .png ...

Bonjour, trouvé sur : cachan.org - commandespratiques

Lancé dans terminal root (avant de le faire par un lien bureau) :

On peut d'ailleurs avoir un script avec deux arguments : mettez le contenu ci-dessous dans un fichier exécutable appelé redimensionne (dans votre path, /usr/local/bin par exemple), et si vous tapez redimensionne /chemin/de/source /chemin/de/destination, cela fera ce à quoi vous vous attendez. Si vous avez des espaces dans vos noms de répertoires, pensez à les entourer de guillemets.

#!/bin/bash

COMMAND="convert -quality 60 -size 1024x768"
# (syntaxe bash) Si on a moins de deux arguments, on quitte
[ $# -ne 2 ] && echo 'J'\''ai besoin de deux arguments !' && exit 1
# (syntaxe bash) Si le répertoire source n'existe pas, on quitte
[ ! -d "$1" ] && echo 'J'\''ai besoin d'un répertoire de source valide !' && exit 1
SOURCE="$1"
DEST="$2"
# (syntaxe bash) Si et seulement si le répertoire de destination existe, on le crée
# avec éventuellement les répertoires parents qui vont bien
[ ! -d "$DEST" ] && mkdir -p "$DEST"
# Ça marche avec les .jpg .jpeg .png .JPG .JPEG .PNG
# - les ( ) entourent l'ensemble des conditions pour que -exec s'applique à toutes
# - execdir renvoie "./fichier.jpg" plutôt que "/chemin/vers/fichier.jpg" et
# exécute la commande dans le répertoire où se trouve le fichier
find "$SOURCE" \( -iname "*.jpg" -o iname "*.jpeg" -o iname "*.png" \) -execdir $COMMAND {} "$DEST"/{} \;


Réponse :

find: paths must precede expression: iname


neutral
Si y'en a un pour expliquer la syntaxe et completer l'bidule... j'suis d'ssus... tongue

Amitie, Joel

Dernière modification par smolski (27-11-2008 11:16:32)


saque eud dun (patois chtimi : fonce dedans)

Hors ligne

#2 26-11-2008 14:08:09

freddec
homo-informaticus du genre linuxo-debianicum
Lieu : Saint Jean d'Y (17)
Distrib. : Branche Stable (BullsEye en 2022)
Noyau : Ca depend !
(G)UI : XFCE (+/- Mate, Cinnamon, Gnome, LXDE)
Inscription : 09-01-2008

Re : [Resolu] script bash - reduire fichier .jpg .jpeg .png ...

Salut

Je suis pas trop au top pour le scripting mais il s'agit simplement d'un script automatisant des commandes imagemagick

Un passage par cette page t'en dira bien plus a son sujet que ce script
http://imagemagick.org/script/index.php

Desktop: Debian BullsEye (Core I5 - 16Go - SSD + 2HDD et NAS Netgear)
Laptop 1: BullsEye (PackardBell TS 44, Core I5, 4Go, SSD), Laptop 2: BullsEye (Lenovo, Core I5, 8Go, SSD)
EeePC : Debian Jessie (Atom N450, 2 Go)
Raspberry Pi B+: Raspbian (Stretch)

Hors ligne

#3 26-11-2008 16:14:08

smolski
quasi...modo
Lieu : AIN
Distrib. : backports (buster) 10
Noyau : Linux 4.19.0-8-amd64
(G)UI : gnome
Inscription : 21-10-2008

Re : [Resolu] script bash - reduire fichier .jpg .jpeg .png ...

Bonjour freddec, merci de m'avoir donne le lien, douleur en anglais... Toutefois, l'indication a la fin de l'execution du script ne renvoit-elle pas a "find" ?
Pour voir, j'ai modifie la commande par :

COMMAND="mogrify -quality 10"
...


Pour le script, je reste avec le meme message (en entier s'coussi...) : roll

find: paths must precede expression: iname
Usage: find [-H] ... [expression] (tous les [...]  possibles du man find) sad


malgres cette nouvelle commande...:P

Amitie, Joel

Dernière modification par smolski (26-11-2008 16:42:58)


saque eud dun (patois chtimi : fonce dedans)

Hors ligne

#4 26-11-2008 21:53:56

anonyme
Invité

Re : [Resolu] script bash - reduire fichier .jpg .jpeg .png ...

Bonjour Smolski,

Oui, l'erreur que tu obtiens ne dépend aucunement du contenu de ta variable $COMMANDE, elle vient du find, qui est délicat à manier.
Je sais que je me suis battu une fois un moment là dessus avant de trouver la syntaxe que find à bien voulu honorer, et je n'ai encore jamais essayé les options -exec*. De plus, lors de la mise dans un script, il m'a encore fallu modifier, mais ça permet de décomposer les problèmes.

Mets au point ta commande find en dehors du script, en utilisant des variables définies dans ton shell.
Par exemple, pour tester ta ligne find je viens de faire:

mkdir test
cd test
mkdir Rep_Source
mkdir Rep_Dest
cp /home/tux12/Sons_et_Images/recup_web/*.jpg Rep_Source/
SOURCE="Rep_Source"
DEST="Rep_Dest"
COMMAND="cp"


Moi je partirai différemment. genre

for Fichier in `ls $SOURCE`; \
 do $COMMANDE $SOURCE/$Fichier $DEST; \
done


Tu peux l'utiliser en ligne de commande avec les variables précédemment définies. Ça tient sur une ligne, je l'ai décomposé pour la lisibilité.


@+

#5 26-11-2008 23:15:42

Melodie
Modérateur
Lieu : Pyrénées
Distrib. : Bento Openbox
(G)UI : Openbox
Inscription : 28-05-2007
Site Web

Re : [Resolu] script bash - reduire fichier .jpg .jpeg .png ...

Le mien:

#!/bin/sh
mkdir modif
for i in `ls *.*`;do convert $i -resize 25% -quality 85 -interlace line modif/$i ; done

#cd modif
#mkdir alendroit
#for i in `ls *.*`; do convert $i -rotate 270 alendroit/$i ; done


Les lignes commentées sont là pour mémoire, et sont des lignes de commandes de rechange en fonction des besoins.

convert est une commande qui implique la création d'un nouveau fichier à partir du fichier d'origine. Donc à la fin de l'opération le fichier d'origine existe toujours. mogrify implique la modification du fichier d'origine, ce qui fait qu'à la fin de l'opération le fichier d'origine n'existe plus et a été substitué par le nouveau fichier modifié.

C'est la raison pour laquelle mon script démarre par la création d'un nouveau (sous-)répertoire où les fichiers modifiés seront copiés.

En espérant que cela aide.

PS : je me suis inspirée d'un tuto sur commencamarche.net et j'ai demandé son aide à quelqu'un sachant écrire bash correctement contrairement à moi : depuis, je me contente de modifier valeurs et options selon mes besoins, à l'aide du man en cas de nécessité.

et interlace c'est surtout pour les images à publier sur le web, et donc qui ont besoin d'être légères pour passer sur toutes les qualités de connexions : ça les allège, sachant que 'interlace line' les fait apparaître de manière progressive.

À titre de démonstration, voici un billet contenant une galerie d'images modifiées à l'aide d'un script similaire[¹] à celui-ci. La conservation des qualités visuelles en même temps que le redimensionnement par lots, est le gros avantage de ce type de script.  smile

[¹] Avant d'avoir le bon pourcentage de réduction, je dois m'y reprendre à plusieurs fois. Si j'ai besoin d'une précision optimale, je fais un échantillon avec Gimp (un modèle avec un calque vide de la taille que je veux obtenir), puis un calcul type règle de trois (le rapport entre le modèle d'origine et le calque vide représentant la taille que je veux réussir à avoir ) pour obtenir un %age que je puisse appliquer à tout le lot.


le blog d'une newbie :: Linuxvillage :: Bentovillage


À propos de l'OS dominant ::> “Il est plus facile de berner les gens que de leur faire admettre qu'ils ont été bernés” (trad d'une citation approximative de Mark Twain)

Hors ligne

#6 27-11-2008 11:14:04

smolski
quasi...modo
Lieu : AIN
Distrib. : backports (buster) 10
Noyau : Linux 4.19.0-8-amd64
(G)UI : gnome
Inscription : 21-10-2008

Re : [Resolu] script bash - reduire fichier .jpg .jpeg .png ...

Merci a vous,
Dac pour tes scripts Melodie, et je suis aussi alleche par le "find" qui parait plus evolué comme outil... wink

Tchibaaah ! Trouve dans man find (lenny) line 1282 (pour etre exact...) EN FRANCAIS !!! big_smile
ecrire -o -iname et non -o iname pour les autres expressions .jpeg et .png... etonnant, non ?
Donc :

On peut d'ailleurs avoir un script avec deux arguments : mettez le contenu ci-dessous dans un fichier exécutable appelé redimensionne (dans votre path, /usr/local/bin par exemple), et si vous tapez redimensionne /chemin/de/source /chemin/de/destination, cela fera ce à quoi vous vous attendez. Si vous avez des espaces dans vos noms de répertoires, pensez à les entourer de guillemets.

#!/bin/bash

COMMAND="convert -quality 60 -size 1024x768"
# (syntaxe bash) Si on a moins de deux arguments, on quitte
[ $# -ne 2 ] && echo 'J'\''ai besoin de deux arguments !' && exit 1
# (syntaxe bash) Si le répertoire source n'existe pas, on quitte
[ ! -d "$1" ] && echo 'J'\''ai besoin d'un répertoire de source valide !' && exit 1
SOURCE="$1"
DEST="$2"
# (syntaxe bash) Si et seulement si le répertoire de destination existe, on le crée
# avec éventuellement les répertoires parents qui vont bien
[ ! -d "$DEST" ] && mkdir -p "$DEST"
# Ça marche avec les .jpg .jpeg .png .JPG .JPEG .PNG
# - les ( ) entourent l'ensemble des conditions pour que -exec s'applique à toutes
# - execdir renvoie "./fichier.jpg" plutôt que "/chemin/vers/fichier.jpg" et
# exécute la commande dans le répertoire où se trouve le fichier
find "$SOURCE" \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" \) -execdir $COMMAND {} "$DEST"/{} \;


Ca marche cool

Edit : Perso, suite aux conseils de Melodie et Freddec a consulter le man convert smile , j'utilise :

COMMANDE="convert -strip -quality 60 -resize n x n
# n=(un chiffre) le chiffrage exact de mes vignettes en pixel.


# -strip sert a enlever les indications de prise de vue inutiles sur un site. (EXIF)

Amitie, Joel

Dernière modification par smolski (29-11-2008 09:09:48)


saque eud dun (patois chtimi : fonce dedans)

Hors ligne

#7 27-11-2008 12:33:10

anonyme
Invité

Re : [Resolu] script bash - reduire fichier .jpg .jpeg .png ...

Bonjour smolski,

Magnifique! big_smile
Merci pour le retour. J'aurais pu chercher longtemps, n'ayant que 970 lignes dans le man de find (etch) et rien de tel que ce que tu rapportes dedans.

@+

#8 27-11-2008 19:18:10

Melodie
Modérateur
Lieu : Pyrénées
Distrib. : Bento Openbox
(G)UI : Openbox
Inscription : 28-05-2007
Site Web

Re : [Resolu] script bash - reduire fichier .jpg .jpeg .png ...

Salut,

Je n'ai pas besoin de "find" dans mes scripts parce que je sais déjà où sont les fichiers sur lesquels je veux travailler. Ils sont dans le répertoire courant. big_smile

find est un outil en forme de couteau suisse, mais ce n'est pas lui qui redimensionne tes images, ce sont les outils de la suite imagemagick.

(convert et resize, et d'autres encore).

As-tu été voir le site de imagemagick ?

le blog d'une newbie :: Linuxvillage :: Bentovillage


À propos de l'OS dominant ::> “Il est plus facile de berner les gens que de leur faire admettre qu'ils ont été bernés” (trad d'une citation approximative de Mark Twain)

Hors ligne

#9 27-11-2008 21:15:43

smolski
quasi...modo
Lieu : AIN
Distrib. : backports (buster) 10
Noyau : Linux 4.19.0-8-amd64
(G)UI : gnome
Inscription : 21-10-2008

Re : [Resolu] script bash - reduire fichier .jpg .jpeg .png ...

Bonsoir,
@Melodie Oui, je visite ce site imagemagick signalé egalement par Freddec smile dans ce fil. L'anglais m'est difficile, surtout pour etudier...
J'accroche quand meme : gestion du site photo video oblige...

Find est un outil de gestion de fichiers tres avancé, le man en francais me permet de le maitriser plus aisement... Ainsi, davantage de commandes automatisees, sures et sans (trop...) de blabla  pourront se configurer...

Un outil puissant dope l'imaginaire ! La vie est belle avec Debian ! big_smile

Amitie, Joel

Dernière modification par smolski (27-11-2008 21:30:12)


saque eud dun (patois chtimi : fonce dedans)

Hors ligne

#10 27-11-2008 21:25:39

anonyme
Invité

Re : [Resolu] script bash - reduire fichier .jpg .jpeg .png ...

smolski a écrit :

Un outil puissant dope l'imaginaire ! La vie est belle avec Debian !


Ce n'est pas une particularité de Debian, c'est la magie de la ligne de commande qui commence à opérer. wink

@+ big_smile

#11 27-11-2008 21:52:20

smolski
quasi...modo
Lieu : AIN
Distrib. : backports (buster) 10
Noyau : Linux 4.19.0-8-amd64
(G)UI : gnome
Inscription : 21-10-2008

Re : [Resolu] script bash - reduire fichier .jpg .jpeg .png ...

Bonsoir,
@tux12 Pas d'accord tux, W$ ne donne pas envie d'utiliser la ldc, bien au contraire avec tous ses "clic ici" glapissant. sad
J'avais taté de la console sous $W... Rien a voir avec ce que j'ai decouvert sous Linux !!! lol

Et longue vie a DF, amitie, Joel

saque eud dun (patois chtimi : fonce dedans)

Hors ligne

#12 27-11-2008 22:05:46

anonyme
Invité

Re : [Resolu] script bash - reduire fichier .jpg .jpeg .png ...

Oui smolski, Linux, pas Debian. wink

#13 27-11-2008 22:11:59

smolski
quasi...modo
Lieu : AIN
Distrib. : backports (buster) 10
Noyau : Linux 4.19.0-8-amd64
(G)UI : gnome
Inscription : 21-10-2008

Re : [Resolu] script bash - reduire fichier .jpg .jpeg .png ...

En fait, oui cool
Bonne soiree, Joel

saque eud dun (patois chtimi : fonce dedans)

Hors ligne

Pied de page des forums