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 21/12/2019, à 17:07

kalene

Transfère d'images convertie dans un dossier (shell script) [Résolu]

Bonjour,

J'ai un problème dans mon code j'ai l'impression qu'il n'arrive pas a trouver le dossier ./Images. Ou est l’erreur ?

dir="./Images"
for image in "$dir"/*.png *.PNG *.jpg *.jpeg *.gif
    do convert $image -thumbnail '400x400>' miniatures/$image
done

Ce que je cherche a faire c'est de prendre toutes les images dans le dossier /Images et de les convertir dans /miniatures

La prochaine étape est de rentrer directement le repertoire

read -p 'Enter your repertory : ' repertory
 
for image in "$repertory"/*.png *.PNG *.jpg *.jpeg *.gif
    do convert $image -thumbnail '400x400>' miniatures/$image
done

Merci a vous d'avance !

-

Dernière modification par kalene (Le 21/12/2019, à 19:43)

Hors ligne

#2 Le 21/12/2019, à 17:24

kamaris

Re : Transfère d'images convertie dans un dossier (shell script) [Résolu]

Pour lister les fichiers dans la boucle for c'est :

"$dir"/*.{png,PNG,jpg,jpeg,gif}

Hors ligne

#3 Le 21/12/2019, à 17:41

kalene

Re : Transfère d'images convertie dans un dossier (shell script) [Résolu]

Ah merci beaucoup Kamaris !! j'avais vus qu'on pouvait le faire comme ça, mais je pensais que ça revenait au meme ma faute de me pas avoir test ...

Hors ligne

#4 Le 21/12/2019, à 18:05

kalene

Re : Transfère d'images convertie dans un dossier (shell script) [Résolu]

Apres modification du code ca ne fonctionne toujours pas. il y a une autre erreur non ?

#!/bin/bash

dir="./Images"
for image in "$dir"/*.{png,PNG,jpg,jpeg,gif} 
     do convert $image -thumbnail '200x200>' miniatures/$image
done 

il me dise :
convert-im6.q16: unable to open image `./Images/*.png': No such file or directory @ error/blob.c/OpenBlob/2874.
convert-im6.q16: no images defined `miniatures/./Images/*.png' @ error/convert.c/ConvertImageCommand/3258.
convert-im6.q16: unable to open image `./Images/*.PNG': No such file or directory @ error/blob.c/OpenBlob/2874.
convert-im6.q16: no images defined `miniatures/./Images/*.PNG' @ error/convert.c/ConvertImageCommand/3258.
convert-im6.q16: unable to open image `miniatures/./Images/30x60-gris.jpg': No such file or directory @ error/blob.c/OpenBlob/2874.
convert-im6.q16: unable to open image `./Images/*.jpeg': No such file or directory @ error/blob.c/OpenBlob/2874.
convert-im6.q16: no images defined `miniatures/./Images/*.jpeg' @ error/convert.c/ConvertImageCommand/3258.
convert-im6.q16: unable to open image `./Images/*.gif': No such file or directory @ error/blob.c/OpenBlob/2874.
convert-im6.q16: no images defined `miniatures/./Images/*.gif' @ error/convert.c/ConvertImageCommand/3258.

Hors ligne

#5 Le 21/12/2019, à 18:13

kamaris

Re : Transfère d'images convertie dans un dossier (shell script) [Résolu]

Il ne semble pas y avoir de fichiers .{png,PNG,jpeg,gif} dans ton répertoire Images.
Sinon tu peux utiliser la commande basename pour séparer les noms de fichiers des répertoires dans la boucle for :

do convert "$image" -thumbnail '200x200>' "miniatures/$(basename "$image")"

Hors ligne

#6 Le 21/12/2019, à 18:34

kalene

Re : Transfère d'images convertie dans un dossier (shell script) [Résolu]

Merci encore Kamaris la ça fonctionne smile
Mais certaine images ne sont pas convertie je ne comprend pas seulement 13/23, enfin si j'ai trouvé c'est quand elles ont des espaces dans leurs noms. Ya moyen d'y remédier ?

Hors ligne

#7 Le 21/12/2019, à 18:45

kamaris

Re : Transfère d'images convertie dans un dossier (shell script) [Résolu]

Tu as bien mis des guillemets autour des variables comme j'ai mis en #5 ?

Hors ligne

#8 Le 21/12/2019, à 19:06

kalene

Re : Transfère d'images convertie dans un dossier (shell script) [Résolu]

Oui

#!/bin/bash

dir="./Images"
for image in "$dir"/*.{png,PNG,jpg,jpeg,gif} 
	do convert $image -thumbnail '400x400>' "miniatures/$(basename "$image")"
done 

Hors ligne

#9 Le 21/12/2019, à 19:13

kamaris

Re : Transfère d'images convertie dans un dossier (shell script) [Résolu]

Et non ! wink

do convert "$image" …

Hors ligne

#10 Le 21/12/2019, à 19:19

kalene

Re : Transfère d'images convertie dans un dossier (shell script) [Résolu]

Ah my bad xDDD
Bon bah tous fonctionne alors merci encore wink
Je débute dans le domaine alors je risque de bombarder ce forum xD. Mais je recherche beaucoup avant mais au d'un moment je demande de l'aide !
Merci !

Code complet :

#!/bin/bash

if [ -z  $1 ]
then 
	sortie='galerie.html'
	echo "Default Galerie"
else 
	sortie=$1
	echo "$1"
fi
	echo '' > $sortie 
if [ ! -e miniatures ] 
	then mkdir miniatures 
fi
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" > 
	<head> 
		<title>Ma galerie</title> 
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
		<style type="text/css"> 
		a img { border:0; } 
		</style> 
	</head> 
	<body>
		<p>' >> $sortie 

while [ ! -e "$repertory" ] || [ -z "$repertory" ] 	
	do read -p 'Enter your repertory : ' repertory
	if [ -z "$repertory" ] 
	then 
		echo "Inserer du texte"
	else
        echo "Le chemin entrer n'est pas valide" 
    fi
done
		for image in "$repertory"/*.{png,PNG,jpg,jpeg,gif}
			do convert "$image" -thumbnail '200x200>' "miniatures/$(basename "$image")"
			echo '<a href="'$image'"><img src="miniatures/'$(basename "$image")'" alt="" /> </a> '>> $sortie 
		done 
		echo'
		</p> 
	</body> 
</html>' >> $sortie

Dernière modification par kalene (Le 21/12/2019, à 19:21)

Hors ligne

#11 Le 21/12/2019, à 19:57

kamaris

Re : Transfère d'images convertie dans un dossier (shell script) [Résolu]

kalene a écrit :

Je débute dans le domaine alors je risque de bombarder ce forum xD.

Pas de problème, tu peux y aller, il y aura toujours du monde pour te répondre ici smile

Quelques petites suggestions :

  • mieux protéger les variables :

    if [ -z  "$1" ]
    echo … > "$sortie"
  • utiliser -d pour les tests sur répertoires :

    if [ ! -d miniatures ] 
      then mkdir miniatures 
    fi
  • utiliser mkdir -p plutôt que le test qui précède (voir man mkdir)

  • la boucle while pour l'acquisition du nom du répertoire images devrait être revue, par exemple comme ça :

    while true; do
      read -p 'Enter your directory : ' directory
      if [ -z "$directory" ]; then
        echo "Inserer du texte"
        continue
      fi
      if [ -d "$directory" ]; then break
      else echo "Le chemin entré n'est pas valide"; fi
    done

Hors ligne

#12 Le 21/12/2019, à 20:13

kalene

Re : Transfère d'images convertie dans un dossier (shell script) [Résolu]

Très bien c'est pris en compte, j'ai tout changé
Merci de nouveau, ça m'aide beaucoup t'es suggestions d'amelioration !

Hors ligne

#13 Le 21/12/2019, à 20:24

Watael

Re : Transfère d'images convertie dans un dossier (shell script) [Résolu]

kamaris,

quand on propose une substitution d'accolades, on n'emploie plus basename, mais des substitutions de paramètres !


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#14 Le 21/12/2019, à 20:30

kalene

Re : Transfère d'images convertie dans un dossier (shell script) [Résolu]

Comment ça des substitutions ? j'ai pas compris ? on remplace base name par quoi du coup ?

Hors ligne

#15 Le 21/12/2019, à 20:41

kamaris

Re : Transfère d'images convertie dans un dossier (shell script) [Résolu]

En exercice tongue
Lire

man -P 'less -p "^\s+Parameter Expansion"' bash

et remplacer la commande basename par son équivalent en bash smile

Hors ligne

#16 Le 21/12/2019, à 20:47

kalene

Re : Transfère d'images convertie dans un dossier (shell script) [Résolu]

J'arrive pas a cerner le truc donc dans l'exemple de :

"miniatures/$(basename "$image")"

si je le change en bash ça donne quoi ? ^^

Hors ligne

#17 Le 21/12/2019, à 21:08

nany

Re : Transfère d'images convertie dans un dossier (shell script) [Résolu]

Bonjour,


kalene a écrit :

J'arrive pas a cerner le truc donc dans l'exemple de :

"miniatures/$(basename "$image")"

si je le change en bash ça donne quoi ? ^^

"miniatures/${image##*/}"

wink



Et, pour vérifier tes scripts avant de venir poser des questions ici, use et abuse de ShellCheck.

Hors ligne

#18 Le 21/12/2019, à 21:23

kalene

Re : Transfère d'images convertie dans un dossier (shell script) [Résolu]

Ok ça marche Nany, merci smile

Genial cette outil !

Dernière modification par kalene (Le 21/12/2019, à 21:33)

Hors ligne