Pages : 1
#1 Le 03/06/2007, à 10:44
- john5168
Bug étrange dans script bash
Bonjour,
Je me suis fait un petit script pour faire du noir et blanc et du sépia sur mes photo avec traitement par lot.
Fonctionnement : Depuis nautilus je clic droit sur le dossier source puis zenity s'ouvre pour choisir un répertoire de destination. Le script copie le contenu du dossier source dans le dossier de destination et travail sur le dossier de destination.
Problème : Quand le dossier de destination et vide tout fonctionne bien. Mais quand il y a déjà un dossier de photo dedans il copie le second dossier et travail sur le premier. De plus si il y a 2 dossier dans le dossier de destination il copie plus rien.
Je ne comprend rien au problème.
Mon script :
#!/bin/bash
## auteur : john5168
## dépendance : zenity ; imagemagick
## version : 1
# Change le séparateur standard (espace) pour RETURN
IFS='
'
folder="$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
# Variable de la barre de progression
NB_PHOTOS=$(find $folder -iname '*.jpg' -o -iname '*.jpeg' | wc -l)
COMPTEUR=0
# Séléction d'action
RET=`zenity --list --radiolist --width=450 --height=250 \
--title "Action à définir pour les photos" \
--column="" --column "Liste des actions" \
TRUE "Noir et Blanc" \
FALSE "Effet Sépia"`
if echo "$RET" | grep "Effet Sépia"; then
Sep=`zenity --entry --text="Facteur d'aplication de l'effet sépia en %" --entry-text="60%"`
fi
# Sélection du dossier ou sont copier les photos
ficsrc=`zenity --file-selection --directory "Choix du repertoire "`
if [ "$?" != "1" ]
then
echo "repertoire choisi " $ficsrc
(cp -r $folder $ficsrc
IFS=$'\n' && for i in $(find $ficsrc -iname '*.jpg' -o -iname '*.jpeg');do
IFS=$' \n\t'
if echo "$RET" | grep "Noir et Blanc"; then
mogrify -modulate 100,0,0 "$i"
fi
if echo "$RET" | grep "Effet Sépia"; then
mogrify -sepia-tone $Sep "$i"
fi
# faire le calcul du pourcentage, puis envoyer le résultat dans le tube.
COMPTEUR=$((COMPTEUR + 100))
echo $((COMPTEUR / NB_PHOTOS))
done ) | zenity --progress --auto-close || exit 1
else
echo "pas de repertoire choisi"
fi
Les associations du logiciel libre :
http://www.april.org/ ; http://www.aful.org/
Boutique informatique à encourager
Je suis client satisfais de Novatux
Hors ligne
#2 Le 04/06/2007, à 18:29
- john5168
Re : Bug étrange dans script bash
up
Merci pour vos réponse,
Les associations du logiciel libre :
http://www.april.org/ ; http://www.aful.org/
Boutique informatique à encourager
Je suis client satisfais de Novatux
Hors ligne
#3 Le 04/06/2007, à 19:48
- abetsic
Re : Bug étrange dans script bash
Tu as essayé ton script sans les zenity ?
Fais un squelette de ton script qui contient le minimum et teste le dans différents cas de figure. Une fois que tu auras validé ça rajoutes les interfaces zenity une à une.
Hors ligne
#4 Le 06/06/2007, à 09:55
- soupaloignon
Re : Bug étrange dans script bash
Bonjour,
Juste un message pour te féliciter pour ton script. J'en cherchais justement un me permettant de convertir par lot en noir et blanc et je tombe sur ton post
Sinon juste une piste. Si ton script crée automatiquement un nouveau dossier dans le dossier des images à modifier, cela contourne ton problème non ?
Auquel cas tu peux peut être t'appuyer sur ce script qui fait ce type de création de dossier (je te laisse chercher à quel endroit )
#!/bin/bash
# Author : Mathieu Vilaplana <mathieu@creationgif.com>
# Date : 09/03/2005
#depends: imagemagick, zenity
# thanks to coffe
#version 0.4
# - check mime type
#since v 0.4, solve bug with filename spaces
#version 0.6
# - correct bug in filename with spaces
# - create a subdirectory to create images
#test if a file has been selected
if [ $# -eq 0 ]; then
zenity --error --title="error" --text="You must select at least 1 file to process"
exit 1
fi
#=========================
# SELECT SIZE DIALOG
title="Choose which sizes to scale to"
imgsize=`zenity --title "$title" --list --separator=" " --column="size" "160x120" "320x240" "640x480" "426x320" "800x600" "1024x768" `
#if $? != 0, user click on cancel button, so exit
if [ "$?" != 0 ] ; then
exit
fi
#user must select a target size
imgsize=`echo $imgsize | sed 's/ max//g'`
if [ ! "$imgsize" ]; then
zenity --error --title="error" --text="select a target size"
exit
fi
#transform 640x480 en 640x640 for convert to respect proportions
himgsize=$imgsize
val1=`echo "$imgsize" | awk -F'x' '{ print $1 }'`
imgsize="${val1}x${val1}"
# END SELECT SIZE DIALOG
#=========================
#Select only images
nb_images=0;
selection="";
while [ $# -gt 0 ]; do
isimage=`file -bi "$1" | grep image | wc -l`
if [ $isimage -eq 1 ]; then
selection[$nb_images]=$1
let "nb_images++"
fi
shift
done
#create directory if not exist and at least one image to process
if [ ! -d $himgsize ] && [ "$nb_images" -gt "0" ];then
mkdir $himgsize
fi
n=$nb_images
let "n=n-1"
(for i in `seq 0 $n`;do
picture=${selection[$i]}
let "compteur += 1"
echo "# Processing image $compteur / $nb_images $picture ..."
convert -quality 60 -resize $imgsize "$picture" $himgsize/"$picture"
let "progress = compteur*100/nb_images"
echo $progress
done
) |
zenity --progress --auto-close --title="Scaling images" --text="Processing images ..." --percentage=0
Dernière modification par soupaloignon (Le 06/06/2007, à 09:56)
==> Libérez les huitres du bassin d'Arcachon <==
Hors ligne
#5 Le 06/06/2007, à 17:48
- john5168
Re : Bug étrange dans script bash
J'y ai pensés a créer un nouveau dossier a chaque fois mais il faux qui est un nom différent a chaque fois. Et la je sais pas faire.
Je regarderais ce week-end pour l'histoire des zenity que me parle abetsic. Mais je doute que le problème vienne de là.
Merci a vous deux.
Les associations du logiciel libre :
http://www.april.org/ ; http://www.aful.org/
Boutique informatique à encourager
Je suis client satisfais de Novatux
Hors ligne
#6 Le 06/06/2007, à 18:13
- soupaloignon
Re : Bug étrange dans script bash
Tiens regarde ici :
http://forum.ubuntu-fr.org/viewtopic.php?pid=973895#p973895
un script qui teste le contenu d'un répertoire qui contient des dossiers nommés 001 002 003 et qui créé un dossier en incrémentant d'une unité le dernier dossier créé.
Donc si tu l'adaptes au tien tu auras des noms différents.
==> Libérez les huitres du bassin d'Arcachon <==
Hors ligne
#7 Le 06/06/2007, à 19:52
- john5168
Re : Bug étrange dans script bash
merci soupaloignon je v voir,
Pour les espace j'ai eu le même problème que toi mais je l'ai resolu avec les cmd "IFS"
Les associations du logiciel libre :
http://www.april.org/ ; http://www.aful.org/
Boutique informatique à encourager
Je suis client satisfais de Novatux
Hors ligne
#8 Le 07/06/2007, à 07:46
- Alain.g
Re : Bug étrange dans script bash
Bonjour
Je n'ai ni testé ni regardé en détail, mais il me semble qu'un truc n'est déjà pas très logique : tu copies $folder dans $ficsrc puis tu fais une recherche dans $ficsrc et non dans le dossier copié dans $ficsrc
Xubuntu Karmic !
Hors ligne
#9 Le 09/06/2007, à 10:49
- john5168
Re : Bug étrange dans script bash
Alain.g je ne comprend pas je travail bien après copie sur le dossier $ficsrc.
Les associations du logiciel libre :
http://www.april.org/ ; http://www.aful.org/
Boutique informatique à encourager
Je suis client satisfais de Novatux
Hors ligne
#10 Le 09/06/2007, à 11:58
- Alain.g
Re : Bug étrange dans script bash
Mais je te dis justement que ça ne me semble pas logique que tu "travailles" sur le dossier $ficsrc puisque ce n'est que le répertoire qui va contenir le dossier copié.
C'est sur le dossier copié qu'il faut "travailler", non sur son parent
Xubuntu Karmic !
Hors ligne
#11 Le 09/06/2007, à 12:30
- john5168
Re : Bug étrange dans script bash
A oui tu a raison je suis trop nul !!!!!!!!
Mais comment connaître le nom du dossier copié ? Car il porte le nom du dossier source mais dans le chemin cible (facile a dire mais a programmé c'est moins drôle).
Les associations du logiciel libre :
http://www.april.org/ ; http://www.aful.org/
Boutique informatique à encourager
Je suis client satisfais de Novatux
Hors ligne
#12 Le 09/06/2007, à 14:48
- Alain.g
Re : Bug étrange dans script bash
tu peux utiliser basename ou découper comme ça ${i##*/}
donc :
find $ficsrc/`basename $folder`
ou
find $ficsrc/${folder##*/}
Xubuntu Karmic !
Hors ligne
#13 Le 09/06/2007, à 16:54
- john5168
Re : Bug étrange dans script bash
encore merci Alain.g ce n'est pas la première fois que tu m'aide. Bravo pour votre participassions et cette entre aide à tous.
Seule la deuxième solution fonctionne chez moi, car la première je n'ai pas le "/" qui sépare le dernier dossier de $ficsrc et celui de $folder.
Donc mon script qui fonctionne je l'espère :
#!/bin/bash
## auteur : john5168
## dépendance : zenity ; imagemagick
## version : 2
# Change le séparateur standard (espace) pour RETURN
IFS='
'
folder="$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
# Variable de la barre de progression
NB_PHOTOS=$(find $folder -iname '*.jpg' -o -iname '*.jpeg' | wc -l)
COMPTEUR=0
# Séléction d'action
RET=`zenity --list --radiolist --width=450 --height=250 \
--title "Action à définir pour les photos" \
--column="" --column "Liste des actions" \
TRUE "Noir et Blanc" \
FALSE "Effet Sépia"`
if echo "$RET" | grep "Effet Sépia"; then
Sep=`zenity --entry --text="Facteur d'aplication de l'effet sépia en %" --entry-text="60%"`
fi
# Sélection du dossier ou sont copier les photos
ficsrc=`zenity --file-selection --directory "Choix du repertoire "`
if [ "$?" != "1" ]
then
echo "repertoire choisi " $ficsrc
# Copie des fichiers
(cp -r $folder $ficsrc
# Boucle de traitement des photos (.jpg et .jpeg)
IFS=$'\n' && for i in $(find $ficsrc/${folder##*/} -iname '*.jpg' -o -iname '*.jpeg');do
IFS=$' \n\t'
# Traitement du noir et blanc (en nuence de gris)
if echo "$RET" | grep "Noir et Blanc"; then
mogrify -modulate 100,0,0 "$i"
fi
# Traitement du Sépia
if echo "$RET" | grep "Effet Sépia"; then
mogrify -sepia-tone $Sep "$i"
fi
# faire le calcul du pourcentage, puis envoyer le résultat dans le tube.
COMPTEUR=$((COMPTEUR + 100))
echo $((COMPTEUR / NB_PHOTOS))
done ) | zenity --progress --auto-close || exit 1
else
echo "pas de repertoire choisi"
fi
Les associations du logiciel libre :
http://www.april.org/ ; http://www.aful.org/
Boutique informatique à encourager
Je suis client satisfais de Novatux
Hors ligne
#14 Le 09/06/2007, à 17:00
- john5168
Re : Bug étrange dans script bash
Encore une question comment faire pour vérifier si le dossier à copier existe déjà.
Dernière modification par john5168 (Le 09/06/2007, à 17:06)
Les associations du logiciel libre :
http://www.april.org/ ; http://www.aful.org/
Boutique informatique à encourager
Je suis client satisfais de Novatux
Hors ligne
#15 Le 10/06/2007, à 09:46
- john5168
Re : Bug étrange dans script bash
J'ai trouvez pour le teste du dossier : if [ ! -x $ficsrc/${folder##*/} ]
Encore une question peut on remplacé les boutons [Validé] et [Annulé] de la boite de dialogue zenity -question par [Oui] et [Non].
Les associations du logiciel libre :
http://www.april.org/ ; http://www.aful.org/
Boutique informatique à encourager
Je suis client satisfais de Novatux
Hors ligne
#16 Le 29/06/2007, à 08:02
- i M@N
Re : Bug étrange dans script bash
Hello.
ça n'a pas l'air possible de modifier Valider et Annuler.
Mais merci pour ce script, y'a quelques temps j'ai cherché sans succès comment convertir par lot des images en niveau de gris ... tu viens de me donner une excellente solution.
Respeckt.
@+...
1 x Intel(R) Core i7 2600K CPU 3.4GHz Debian sid = roxX !
1 x MSi Wind U100 Debian sid = roxX !!
Read The F***in' Manual or die tryin' !
webmaster @ http://www.rastavibes.net reggae shop
Hors ligne
#17 Le 29/06/2007, à 17:08
- john5168
Re : Bug étrange dans script bash
de rien,
oui je parle de noire et blanc mais je fait du niveau de gris, car la fonction noir et blanc de imagemagic et bien fait mais le monochrome donne un rendu de moins bonne qualité que le niveau de gris.
Les associations du logiciel libre :
http://www.april.org/ ; http://www.aful.org/
Boutique informatique à encourager
Je suis client satisfais de Novatux
Hors ligne
Pages : 1