Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 19/03/2014, à 17:22

omnimax

aide pour dépoussiérer un nas

Bonjour à tous,

Au bureau on a un paquet d'images en png qui prennent une place folle. J'aimerai toutes les convertir en jpg.


for i in "**/*.(png|PNG)" ; do convert "$i" im.jpg ; done

Le souci est que convert $i im.jpg ne fonctionne pas puisque je lui demande convert /dossier/essai.png im.jpg et non convert /dossier/essai.png /dossier/im.jpg

Il faudrait que ma variable i soit débarrassée de son extension pour donner convert $i (=/dossier/essai).png im.jpg.

Comment fait-on cela ?

Merci pour votre aide.

Dernière modification par omnimax (Le 19/03/2014, à 17:23)


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#2 Le 19/03/2014, à 19:13

casperfr

Re : aide pour dépoussiérer un nas

bonjour,

peut etre avec basename

for i in "**/*.(png|PNG)" ; do convert basename "$i" .jpg ; done

je ne sais pas si cela fonctionne, je n'ai qu'un ubuntu serveur sur lequel je ne peux pas essayé imagemagick

mais je sais que basename te renvois le nom du fichier sans l'extention.
c'est l'équivalent de

sed 's/\..*//'

Bon courage.

Hors ligne

#3 Le 19/03/2014, à 19:55

pingouinux

Re : aide pour dépoussiérer un nas

Bonsoir,
Essaye plutôt :

shopt -s extglob
for i in **/*.@(png|PNG) ; do echo convert "$i" "${i/.???/.jpg}" ; done

Ajouté : Et bien sûr enlève le echo si c'est bon

Dernière modification par pingouinux (Le 19/03/2014, à 20:03)

Hors ligne

#4 Le 19/03/2014, à 21:29

omnimax

Re : aide pour dépoussiérer un nas

bonsoir,

Merci pour vos contributions;

J'ai essayé vos solutions, et j'ai bidouillé un peu et au final ceci fonctionne.

Pouvez-vous me certifier que c'est sans risque, genre nom de fichier avec espaces ou caractères spéciaux ?

 for i in **/*.(png|PNG) ; do convert "$i" "${i/.???/.jpg}" ; done

14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#5 Le 19/03/2014, à 21:47

tiramiseb

Re : aide pour dépoussiérer un nas

Tu as oublié "shopt -s extglob"...

Hors ligne

#6 Le 19/03/2014, à 22:40

pingouinux

Re : aide pour dépoussiérer un nas

omnimax #4 a écrit :

Pouvez-vous me certifier que c'est sans risque, genre nom de fichier avec espaces ou caractères spéciaux ?

Normalement oui, mais il est prudent de faire un test en laissant le echo. Il y aurait cependant un problème avec un nom de fichier contenant un ".", genre photo.vacances.png qui serait transformé en photo.jpgances.png.

Ajouté : En #4, il manque aussi @ dans **/*.@(png|PNG).

Édité : Pour éviter le problème ci-dessus

shopt -s extglob
for i in **/*.@(png|PNG) ; do echo convert "$i" "${i%.*}.jpg" ; done

Dernière modification par pingouinux (Le 20/03/2014, à 09:39)

Hors ligne

#7 Le 20/03/2014, à 13:28

Postmortem

Re : aide pour dépoussiérer un nas

Salut,
Il manque aussi le shopt -s globstar pour que ** descende dans toute l'arbo. Sans ça, c'est équivalent à ne mettre qu'une étoile.

Edit :
Puis tant qu'à utiliser les options, on pourrait faire :

shopt -s globstar nocaseglob
for i in **/*.png ; do echo convert "$i" "${i%.*}.jpg" ; done

Dernière modification par Postmortem (Le 20/03/2014, à 13:40)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#8 Le 20/03/2014, à 20:20

pingouinux

Re : aide pour dépoussiérer un nas

Je ne peux qu'approuver…

Hors ligne