Finalisation script BASH besoin d'un peut d'aide

C’est presque terminé !!! tout fonctionne bein comme tu peux le voir, sauf qu’a la fin il veut travailler sur le créer en amont du scipt !!! les fichiers 9-10-11 c’e’st le repertoire créer .

[code]+ REPERTOIRE_SOURCE=/data/Photos_reduites

  • rep_absent=!!!..Attention, Le repertoire source n’éxiste pas …!!!
  • rep_vide=Votre repertoire est vide, ajoutez vos fichiers et renouveler l’opération.
  • date +%d%m%y
  • DATE=160911
  • VERT=\033[1;32m
  • NORMAL=\033[0;39m
  • ROUGE=\033[1;31m
  • ROSE=\033[1;35m
  • BLEU=\033[1;34m
  • BLANC=\033[0;02m
  • BLANCLAIR=\033[1;08m
  • JAUNE=\033[1;33m
  • CYAN=\033[1;36m
  • echo Teste de la présence du répertoire ou sont stocké les photos à réduire
    Teste de la présence du répertoire ou sont stocké les photos à réduire
  • echo Veuillez patienter quelques instant
    Veuillez patienter quelques instant
  • sleep 2
  • [ ! -e /data/Photos_reduites ]
  • echo -n \033[1;34mNombre de fichiers à traiter :
    Nombre de fichiers à traiter :+ wc -l
  • sed -e /.$/d
  • ls -a /data/Photos_reduites
  • var=8
  • echo \033[1;32m8
    8
  • sleep 2
  • [ 8 -eq 0 ]
  • title=Choisissez la résolution d’image souhaité’
  • zenity --title Choisissez la résolution d’image souhaité’ --list --separator= --column=size 160x120 320x240 640x480 800x600 1024x768
  • imgsize=1024x768
  • [ 0 != 0 ]
  • sed s/ max//g
  • echo 1024x768
  • imgsize=1024x768
  • [ ! 1024x768 ]
  • himgsize=1024x768
  • awk -Fx { print $1 }
  • echo 1024x768
  • val1=1024
  • imgsize=1024x1024
  • echo \033[1;33mLes photos du répertoire courant : \033[1;32m /data/Photos_reduites \033[0;39m, vont être redimenssionnées aux valeurs suivantes :\033[1;32m 1024x1024\033[0;39m
    Les photos du répertoire courant : /data/Photos_reduites , vont être redimenssionnées aux valeurs suivantes : 1024x1024
  • sleep 2
  • cd /data/Photos_reduites
  • date +%d_%m_%Y
  • date=16_09_2011
  • mkdir -p 16_09_2011
  • i=1
  • zenity --info --text=Terminé
  • echo Redimensionnement de : \033[1;32m SL127994.JPG \033[0;39m
  • echo JPG
  • tr [:upper:] [:lower:]
  • ext=jpg
  • out=16_09_2011/16_09_2011_1.jpg
  • [ -f 16_09_2011/16_09_2011_1.jpg ]
  • convert -filter Cubic -resize 1024x1024 SL127994.JPG 16_09_2011/16_09_2011_1.jpg
  • expr 1 + 1
  • i=2
  • echo Redimensionnement de : \033[1;32m SL127995.JPG \033[0;39m
  • echo JPG
  • tr [:upper:] [:lower:]
  • ext=jpg
  • out=16_09_2011/16_09_2011_2.jpg
  • [ -f 16_09_2011/16_09_2011_2.jpg ]
  • convert -filter Cubic -resize 1024x1024 SL127995.JPG 16_09_2011/16_09_2011_2.jpg
  • expr 2 + 1
  • i=3
  • echo Redimensionnement de : \033[1;32m SL127996.JPG \033[0;39m
  • echo JPG
  • tr [:upper:] [:lower:]
  • ext=jpg
  • out=16_09_2011/16_09_2011_3.jpg
  • [ -f 16_09_2011/16_09_2011_3.jpg ]
  • convert -filter Cubic -resize 1024x1024 SL127996.JPG 16_09_2011/16_09_2011_3.jpg
  • expr 3 + 1
  • i=4
  • echo Redimensionnement de : \033[1;32m SL127997.JPG \033[0;39m
  • echo JPG
  • tr [:upper:] [:lower:]
  • ext=jpg
  • out=16_09_2011/16_09_2011_4.jpg
  • [ -f 16_09_2011/16_09_2011_4.jpg ]
  • convert -filter Cubic -resize 1024x1024 SL127997.JPG 16_09_2011/16_09_2011_4.jpg
  • expr 4 + 1
  • i=5
  • echo Redimensionnement de : \033[1;32m SL128000.JPG \033[0;39m
  • echo JPG
  • tr [:upper:] [:lower:]
  • ext=jpg
  • out=16_09_2011/16_09_2011_5.jpg
  • [ -f 16_09_2011/16_09_2011_5.jpg ]
  • convert -filter Cubic -resize 1024x1024 SL128000.JPG 16_09_2011/16_09_2011_5.jpg
  • expr 5 + 1
  • i=6
  • echo Redimensionnement de : \033[1;32m SL128001.JPG \033[0;39m
  • echo JPG
  • tr [:upper:] [:lower:]
  • ext=jpg
  • out=16_09_2011/16_09_2011_6.jpg
  • [ -f 16_09_2011/16_09_2011_6.jpg ]
  • convert -filter Cubic -resize 1024x1024 SL128001.JPG 16_09_2011/16_09_2011_6.jpg
  • expr 6 + 1
  • i=7
  • echo Redimensionnement de : \033[1;32m SL128002.JPG \033[0;39m
  • echo JPG
  • tr [:upper:] [:lower:]
  • ext=jpg
  • out=16_09_2011/16_09_2011_7.jpg
  • [ -f 16_09_2011/16_09_2011_7.jpg ]
  • convert -filter Cubic -resize 1024x1024 SL128002.JPG 16_09_2011/16_09_2011_7.jpg
  • expr 7 + 1
  • i=8
  • echo Redimensionnement de : \033[1;32m SL128003.JPG \033[0;39m
  • echo JPG
  • tr [:upper:] [:lower:]
  • ext=jpg
  • out=16_09_2011/16_09_2011_8.jpg
  • [ -f 16_09_2011/16_09_2011_8.jpg ]
  • convert -filter Cubic -resize 1024x1024 SL128003.JPG 16_09_2011/16_09_2011_8.jpg
  • expr 8 + 1
  • i=9
  • echo Redimensionnement de : \033[1;32m *.[pP][nN][gG] \033[0;39m
  • echo [pP][nN][gG]
  • tr [:upper:] [:lower:]
  • ext=[pp][nn][gg]
  • out=16_09_2011/16_09_2011_9.[pp][nn][gg]
  • [ -f 16_09_2011/16_09_2011_9.[pp][nn][gg] ]
  • convert -filter Cubic -resize 1024x1024 *.[pP][nN][gG] 16_09_2011/16_09_2011_9.[pp][nn][gg]
    convert: unable to open image *.[pP][nN][gG]': /usr/lib/ImageMagick-6.6.0/modules-Q16/coders/[pp][nn][gg].la @ error/blob.c/OpenBlob/2489. convert: missing an image filename16_09_2011/16_09_2011_9.[pp][nn][gg]’ @ error/convert.c/ConvertImageCommand/2940.
  • expr 9 + 1
  • i=10
  • echo Redimensionnement de : \033[1;32m *.[tT][iI][fF][fF] \033[0;39m
  • echo [tT][iI][fF][fF]
  • tr [:upper:] [:lower:]
  • ext=[tt][ii][ff][ff]
  • out=16_09_2011/16_09_2011_10.[tt][ii][ff][ff]
  • [ -f 16_09_2011/16_09_2011_10.[tt][ii][ff][ff] ]
  • convert -filter Cubic -resize 1024x1024 *.[tT][iI][fF][fF] 16_09_2011/16_09_2011_10.[tt][ii][ff][ff]
    convert: unable to open image *.[tT][iI][fF][fF]': /usr/lib/ImageMagick-6.6.0/modules-Q16/coders/[tt][ii][ff][ff].la @ error/blob.c/OpenBlob/2489. convert: missing an image filename16_09_2011/16_09_2011_10.[tt][ii][ff][ff]’ @ error/convert.c/ConvertImageCommand/2940.
  • expr 10 + 1
  • i=11
  • echo Redimensionnement de : \033[1;32m *.[bBmMpP] \033[0;39m
  • echo [bBmMpP]
  • tr [:upper:] [:lower:]
  • ext=[bbmmpp]
  • out=16_09_2011/16_09_2011_11.[bbmmpp]
  • [ -f 16_09_2011/16_09_2011_11.[bbmmpp] ]
  • convert -filter Cubic -resize 1024x1024 *.[bBmMpP] 16_09_2011/16_09_2011_11.[bbmmpp]
    convert: unable to open image *.[bBmMpP]': /usr/lib/ImageMagick-6.6.0/modules-Q16/coders/[bbmmpp].la @ error/blob.c/OpenBlob/2489. convert: missing an image filename16_09_2011/16_09_2011_11.[bbmmpp]’ @ error/convert.c/ConvertImageCommand/2940.
  • expr 11 + 1
  • i=12
    [/code]

Remplace ça :

par

Sa fonctionne pas mal…merci !

Dernière petite chose, si je compte poursuivre mon script mais en étant sûr que cette première partie soit éxécuté comment je dois terminé cette première partie ?

Merci pour le CdM .

Pas compris.

Pour l’instant ,grace à ton aide, le script fonctionne ,toutefois je compte poussez un peut plus loin plus tard, et continuer à la suite de celui-ci, mais comment je commence la suite de tel sorte que la suite commence quand ton script se termine .

  • clair ?

[ Peut-être très simple, mais comme je débute totalement …] et je ne trouve pas de doc accessible aux “dummies”

Ça dépend du fonctionnement que tu veut.

Veux-tu créer un second script (dans un nouveau fichier) qui s’exécuterait après ? ou continuer le script actuel ?
Veux-tu vérifier que toutes les sont traitées ? ou simplement attendre d’avoir essayer avec toute ?

Ceci permet d’avoir une variable à la fin de la boucle ($ret) égale à 0 si tout c’est bien passé et à 1 si au moins une photo a eu un problème :

[code]i=1
ret=0
printf ‘%s\n’ .|egrep -i ‘.(jpg|png|tiff|bmp)$’|while read I ; do
echo “Redimensionnement de : $VERT $I $NORMAL"
ext=”$(echo ${I##*.} | tr [:upper:] [:lower:])“
out=”$date/${date}$i.$ext"
while [ -f “$out” ]; do
i=$((++$i))
out="$date/${date}
$i.$ext"
done
convert -filter Cubic -resize $imgsize $I “$out”
[ $ret -eq 0 -a $? -ne 0 ] && ret=1
i=$((++$i))
done

exit $ret[/code]

Bonjour,

[quote=“MisterFreez”]

[ $ret -eq 0 -a $? -ne 0 ] && ret=1 [/quote]

((ret|=$?))

:wink:

Ça marche sous bash mais pas sou dash :

$ ret=0 $ i=0 $ ((ret|=$i)) dash: ret: not found dash: =0: not found
(du moins avec mes tests)

j’avais testé avec /bin/sh
et en regardant le man de sh, je me rends compte qu’il s’agit de ksh :frowning:

et je n’ai pas dash…
une autre syntaxe :

ret=0 i=0 let 'ret=ret|i'

en gros, l’idée est de faire un “OU” binaire …

edit : après consultation de ce man (en espérant qu’il soit complet), il semble que ce ne soit pas possible …

les expressions arithmétiques y sont très peu décrites …

Si c’est pour remplacer la condition par l’expression booléenne il y a toujours expr :

Sinon il est possible de renommer ret en nb_fail et de remplacer ça :

par

Du coup à la fin nb_fail indique le nombre de fichiers en erreur.

Y’aurrai beaucoup de modif sue le script pour le passer en bash ?

Remplacer le shebang par :

Ensuite pour utiliser tout les bonus de bash (qui sont optionnels) ça demande un peu plus de travail. Voici une version non-testée qui devrait être mieux :

[code]#!/bin/bash
REPERTOIRE_SOURCE="/data/Photos_reduites"
rep_absent="!!!..Attention, Le repertoire source n’éxiste pas …!!!“
rep_vide=“Votre repertoire est vide, ajoutez vos fichiers et renouveler l’opération.“
DATE=date +%d%m%y
VERT=”\033[1;32m"
NORMAL=”\033[0;39m"
ROUGE=”\033[1;31m"
ROSE="\033[1;35m"
BLEU="\033[1;34m"
BLANC="\033[0;02m"
BLANCLAIR="\033[1;08m"
JAUNE="\033[1;33m"
CYAN="\033[1;36m"
echo “Teste de la présence du répertoire ou sont stocké les photos à réduire"
echo “Veuillez patienter quelques instant"
sleep 2
if [ ! -e “$REPERTOIRE_SOURCE” ]
then
echo “$ROUGE””$rep_absent” “$NORMAL"
sleep 2
echo “Veuillez créer le repertoire suivant : “$VERT””$REPERTOIRE_SOURCE”" “$NORMAL"
echo “Fermeture du programme"
sleep 2
exit
fi
echo -n “$BLEU”“Nombre de fichiers à traiter” :
var=$(ls -a “$REPERTOIRE_SOURCE” | grep -cv ‘.$’)
echo “$VERT””$var"
sleep 2
if [ $var -eq 0 ]
then
echo “$ROUGE””$rep_vide""$NORMAL"
echo "Fermeture du programme"
sleep 5
exit
fi
###################################
title="Choisissez la résolution d’image souhaité’“
imgsize=zenity --title "$title" --list --separator=" " --column="size" "160x120" "320x240" "640x480" "800x600" "1024x768"
if [ “$?” != 0 ] ; then
exit
fi
#user have to select target size
#imgsize=echo $imgsize | sed 's/ max//g'
imgsize=${imgsize/ max/}
if [ ! “$imgsize” ]; then
zenity --error --title=“error” --text=“select a target size"
exit
fi
#To respect proportions
himgsize=$imgsize
#val1=echo "$imgsize" | awk -F'x' '{ print $1 }'
val1=”${imgsize##x*}“
imgsize=”${val1}x${val1}”
###################################

echo “$JAUNE”“Les photos du répertoire courant : “$VERT” “$REPERTOIRE_SOURCE” “$NORMAL”, vont être redimenssionnées aux valeurs suivantes :”$VERT" “$imgsize”""$NORMAL"
sleep 2
cd “$REPERTOIRE_SOURCE"
date=”$(date +%d_%m_%Y)"
mkdir -p "$date"
indice=$(printf ‘%s\n’ $date/$date*|awk -F[.] ’ $6 > num { num=$6 } END { print num+1 } ')
printf ‘%s\n’ .|egrep -i ‘.(jpg|png|tiff|bmp)$’|while read I ; do
echo “Redimensionnement de : $VERT $I $NORMAL"
ext=”${I##*.}“
ext=”${ext, ,}“
out=”$date/${date}_$indice.$ext"
convert -filter Cubic -resize $imgsize $I “$out”
((indice++))
done[/code]

Je viens d’essayer sans aller plus loin…

[code]Les photos du répertoire courant : /data/Photos_reduites , vont être redimenssionnées aux valeurs suivantes : 800x600x800x600

  • sleep 2
  • cd /data/Photos_reduites
  • date +%d_%m_%Y
  • date=20_09_2011
  • mkdir -p 20_09_2011
  • printf %s\n /bin /boot /data /dev /etc /home /initrd.img /lib /lost+found /media /mnt /opt /proc /root /sbin /selinux /srv /sys /tmp /usr /var /virtual_HDD /vmlinuz
  • awk -F[_.] $6 > num { num=$6 } END { print num+1 }
  • indice=1
  • read I
  • printf %s\n SL010492.JPG SL010493.JPG SL010495.JPG SL010497.JPG red_img_bash-1.sh
  • egrep -i .(jpg|png|tiff|bmp)$
  • echo Redimensionnement de : \033[1;32m SL010492.JPG \033[0;39m
    Redimensionnement de : SL010492.JPG
  • ext=JPG
    red_img_bash-1.sh: 1: Bad substitution

[/code]

Bonjours à tous,
Voilà le fruit de ma réflexion. C’est un peu tardif, mais je n’ai pu y travailler qu’en pointillés.
:-) $ find ./ -type f ./essai3.ess ./essai4.ESS ./ESSAI2.ess ./ESSAI1.ESS ./sous_rep/essai8.ESS ./sous_rep/ESSAI5.ESS ./sous_rep/ESSAI6.ess ./sous_rep/essai7.ess ./essai1.2.ess ./essai1.1.ESS :-) $ find ./ -type f -printf "%P\n" | awk -v date=$(date +%y%m%d) -F. '{cible="" ; if(NF > 1){for(i=1 ; i < NF ; i++) cible= cible $i "." ; cible= cible date "_" FNR "." tolower($NF) ; system("mv "$0 " "cible)}}' :-) $ find ./ -type f ./essai1.1.110920_10.ess ./essai1.2.110920_9.ess ./sous_rep/essai7.110920_8.ess ./sous_rep/ESSAI5.110920_6.ess ./sous_rep/essai8.110920_5.ess ./sous_rep/ESSAI6.110920_7.ess ./essai3.110920_1.ess ./ESSAI1.110920_4.ess ./ESSAI2.110920_3.ess ./essai4.110920_2.ess :-) $
le cahier des charges tient sur une ligne de commande… un peu longue certes, mais avec un alias… :wink:
Explication dans l’ordre :
[ul]
-printf “%P\n” de la commande find : permet d’éliminer le “./” en début de ligne,
–v date=$(date +%y%m%d) : variable interne à awk initialisée avec la date courante,
–F. : le séparateur de champs,
-cible="" ; à chaque ligne, on réinitialise la variable,
if(NF > 1) : si le nombre de champs n’est pas supérieur à 1, le traitement n’a pas de sens,
-for(i=1 ; i < NF ; i++) cible= cible $i “.” ; : on reconstitue, hormis l’extension, le mon complet (chemin + nom) du fichier,
-cible= cible date “_” FNR “.” tolower($NF) ; on concatène avec les ajouts souhaités. FNR est le numéro de ligne courante. Celui-ci est recyclé en indice,
-system("mv "$0 " "cible) : la commande shell.
[/ul]
Si l’on veut autre chose qu’un point entre le dernier champs du nom et le début des ajouts, il faudra tester sa présence. Ainsi, on pourra lui attribuer un autre caractère (un tiret bas, par exemple).
Si la date n’est pas cruciale, on peut initialiser la variable en début de ligne. Cela évite une recalcul à chaque ligne traitée.

Bonjour,

Je constate une erreur qui est de mon fait :

[quote=“MisterFreez”]

[...] date="$(date +%d_%m_%Y)" mkdir -p "$date" indice=$(printf '%s\n' $_date/$_date_*|awk -F[_\.] ' $6 > num { num=$6 } END { print num+1 } ') [...] [/quote]

–>

Pour le problème de substitution, je pense que cela provient de ext="${ext, ,}" car tu ne dois pas avoir une version de bash >= 4.
(au passage, ce devrait être ext="${ext,}")

@valrik : il faudrait s’assurer que sa version de find “embarque” l’action printf.

A titre d’info, je pense que ceci simplifie la chose :

awk -v date=$(date +%y%m%d) -F. -v OFS=. ' NF > 1 {old=$0; $(NF+1)=tolower($NF); $NF=date "_" FNR; system("mv "old " "$0)}'

Salut Totor,
voilà le résultat de ta commande :

[code]
 :-)  $ find ./ -type f
 ./essai3.ess
 ./essai4.ESS
 ./ESSAI2.ess
 ./ESSAI1.ESS
 ./sous_rep/essai8.ESS
 ./sous_rep/ESSAI5.ESS
 ./sous_rep/ESSAI6.ess
 ./sous_rep/essai7.ess
 ./essai1.2.ess
 ./essai1.1.ESS
  :-)  $ find ./ -type f -printf "%P\n" | awk -v date=$(date +%y%m%d) -F. -v OFS=. ' NF > 1 {old=$0; $(NF+1)=tolower($NF); $NF=date "_" FNR; system("mv "old " "$0)}'
   :-)  $ find ./ -type f
   ./ESSAI1.ESS.110920_4
   ./sous_rep/ESSAI6.ess.110920_7
   ./sous_rep/ESSAI5.ESS.110920_6
   ./sous_rep/essai8.ESS.110920_5
   ./sous_rep/essai7.ess.110920_8
   ./ESSAI2.ess.110920_3
   ./essai1.2.ess.110920_9
   ./essai4.ESS.110920_2
   ./essai3.ess.110920_1
   ./essai1.1.ESS.110920_10
    :-)  $ 
    [/code]

j’ai l’impression qu’il y a un ch’tit souci… peut-être en inversant $(NF+1)=tolower($NF); et $NF=date “_” FNR; ?

:open_mouth:
En effet, ce n’est pas le comportement que j’avais avec la version de awk sous AIX :018

Au vu de ce qu’il se passe, je dirais qu’il faut rajouter un NF++ juste avant l’instruction system
et si ça ne fonctionne pas, je tenterai ainsi :

awk -v date=$(date +%y%m%d) -F. -v OFS=. ' NF > 1 {old=$0; NF++; $NF=tolower($(NF-1)); $(NF-1)=date "_" FNR; system("mv "old " "$0)}'

[quote=“Totor”]…

Pour le problème de substitution, je pense que cela provient de ext="${ext, ,}" car tu ne dois pas avoir une version de bash >= 4.
…[/quote]

Si si chris@lagache:~$ policy bash bash: Installé : 4.1-3 Candidat : 4.1-3 Table de version : 4.2-1~exp1 0 10 http://ftp.fr.debian.org/debian/ experimental/main i386 Packages *** 4.1-3 0 990 http://ftp.fr.debian.org/debian/ squeeze/main i386 Packages 90 http://ftp.fr.debian.org/debian/ wheezy/main i386 Packages 50 http://ftp.fr.debian.org/debian/ sid/main i386 Packages 100 /var/lib/dpkg/status

:119 étrange … :017

ceci man bash|less +/, devrait t’afficher le paragraphe du manuel concernant cette syntaxe. Si ce n’est pas le cas, j’y comprends rien :think:

essaie avec la correction que j’ai donné, à savoir ext="${ext,}" mais je n’y crois pas car la syntaxe donnée par MisterFreez est tout de même valide. :neutral_face:

[quote=“Totor”]:119 étrange … :017
ceci man bash|less +/, devrait t’afficher le paragraphe du manuel concernant cette syntaxe. Si ce n’est pas le cas, j’y comprends rien :think:

essaie avec la correction que j’ai donné, à savoir ext="${ext,}" mais je n’y crois pas car la syntaxe donnée par MisterFreez est tout de même valide. :neutral_face:[/quote]

pour le man, c’est bon… sinon même erreur !!!