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 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 wink


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 big_smile)

#!/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. smile

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