Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 06/01/2010, 10h13   #1
Nouveau Membre du Club
 
Inscription : septembre 2004
Messages : 225
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 225
Points : 35
Points : 35
Envoyer un message via MSN à gotcha5832
Par défaut renommer les fichier par script en nom_dossier_jour.jpg

Bonjour à tous,

Voilà j'ai développer un petit script qui me permet de traiter mes image par lots, (redimensionnement, fusionnement,...)

mais je bute sur une chose j'aimerais encore qu'il renomme tout les images par
nom_dossier_jourmois_01.jpg
exemple:
dans le dossier (fiche technique) le 1janvier fiche_technique_0101_01.jpg
ou encore
dossier (image de coupe) le 4mars image_de_coupe_0403_01.jpg, image_de_coupe_02.jpg...

Mais j'ai un peu de mal pour récupérer le nom du dossier et ajouter le date.
Si quelque pouvais m'aidez ca serais génial.

Merci à vous


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
##############################################
# Réduction de la taille des photos du répertoire courant avec ImageMagick
##############################################
 
# Nom du nouveau répertoire
NV_DOSSIER=reduc
# Création du nouveau dossier s'il n'existe pas
if [ -d $NV_DOSSIER ] ;
then
echo "Le dossier reduc existe déjà"
else
mkdir $NV_DOSSIER
fi
 
# Pour toutes les photos (JPG) du répertoire
for i in *.JPG ;
do
# Réduit l'image en 601x400
convert "$i" -resize 601x400  "$NV_DOSSIER/$i"
# fusione l'image avec un calque contenant les coins
composite -gravity center /home/sacha/Bureau/cadre.png "$NV_DOSSIER/$i" "$NV_DOSSIER/$i"
# fin de la boucle FOR
done 
 
# Pour toutes les photos (jpg) du répertoire
for i in *.jpg ;
do
# Réduit l'image en 601x400
convert "$i" -resize 601x400  "$NV_DOSSIER/$i"
# fusione l'image avec un calque contenant les coins
composite -gravity center /home/sacha/Bureau/cadre.png "$NV_DOSSIER/$i" "$NV_DOSSIER/$i"
# fin de la boucle FOR
done
gotcha5832 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2010, 10h57   #2
Expert Confirmé
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 1 897
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 897
Points : 3 677
Points : 3 677
Code :
1
2
3
4
5
6
7
jourmois=$(date +'%d%m')
for image in *[jJ][pP][gG]; do
   rep="${image%/*}"
   rep="${rep##*/}"
   image="${image##*/}"
   echo "${rep}_${jourmois}_$image"
done

Dernière modification par N_BaH ; 06/01/2010 à 11h54.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2010, 11h49   #3
Nouveau Membre du Club
 
David
Inscription : avril 2009
Messages : 26
Détails du profil
Informations personnelles :
Nom : David
Âge : 40

Informations forums :
Inscription : avril 2009
Messages : 26
Points : 27
Points : 27
Autre possibilité similaire :
Code :
1
2
3
4
5
6
7
DATE="$(/usr/bin/date '+%d%m')_"
for IMAGE in $(find  $REP -name "*.jpg")
do
   DOSSIER="$(basename $(dirname $IMAGE))_"
   FIC="$(basename $IMAGE)"
   echo "$DOSSIER$DATE$FIC"
done
syjis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2010, 11h56   #4
Nouveau Membre du Club
 
Inscription : septembre 2004
Messages : 225
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 225
Points : 35
Points : 35
Envoyer un message via MSN à gotcha5832
Je te remercie mais il semble que ca ne fonctionne pas.

Voiçi mon code:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
##############################################
# Réduction de la taille des photos du répertoire courant avec ImageMagick
##############################################
 
# Nom du nouveau répertoire
NV_DOSSIER=reduc
# Création du nouveau dossier s'il n'existe pas
if [ -d $NV_DOSSIER ] ;
then
echo "Le dossier reduc existe déjà"
else
mkdir $NV_DOSSIER
fi
 
# Pour toutes les photos (JPG) du répertoire
for i in *.[jJ][pP][gG] ;
do
# Réduit l'image en 601x400
convert "$i" -resize 601x400  "$NV_DOSSIER/$i"
# fusione l'image avec un calque contenant les coins
composite -gravity center /home/sacha/Bureau/cadre.png "$NV_DOSSIER/$i" "$NV_DOSSIER/$i"
# fin de la boucle FOR
done  
 
for image in *[jJ][pP][gG]; do
   rep="${image%/*}"
   rep="${rep##*/}"
   image="${image##*/}"
   echo "${rep}_$(date +'%y%m')_$image"
done

Code :
1
2
3
4
[sacha@localhost ~/Bureau/images]$ reductiontest.sh
aze1.JPG_1001_aze1.JPG
qsdf3.JPG_1001_qsdf3.JPG
qsdsqd2.jpg_1001_qsdsqd2.jpg
et le résultat il ne me renomme pas les image.?
et dans l'echo qui est affiché on peut voir qu'il ne met pas le dossier.?

du coup j'ai essayé de l'adapter:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# Nom du nouveau répertoire
NV_DOSSIER=reduc
# Création du nouveau dossier s'il n'existe pas
if [ -d $NV_DOSSIER ] ;
then
echo "Le dossier reduc existe déjà"
else
mkdir $NV_DOSSIER
fi
 
# Pour toutes les photos (JPG) du répertoire
for i in *.[jJ][pP][gG] ;
do
# Réduit l'image en 601x400
convert "$i" -resize 601x400  "$NV_DOSSIER/$i"
# fusione l'image avec un calque contenant les coins
composite -gravity center /home/sacha/Bureau/cadre.png "$NV_DOSSIER/$i" "$NV_DOSSIER/$i"
# fin de la boucle FOR
done 
 
cd "$NV_DOSSIER" 
# mise a zero (1) du compteur
num=1
 
for image in *[jJ][pP][gG]; do
   rep="${image%/*}"
   rep="${rep##*/}"
   image="${image##*/}"
   echo "${rep}_$(date +'%y%m')_$image"
   var=$(echo $file | awk -F. '{print $1}')
   mv "$file" "fruit_$(date +'%y%m')_00${num}.jpg"
((num=num+1))
done
mais il me dis:
Citation:
[sacha@localhost ~/Bureau/images]$ reductiontest.sh
aze1.JPG_1001_aze1.JPG
mv: ne peut évaluer `': Aucun fichier ou répertoire de ce type
qsdf3.JPG_1001_qsdf3.JPG
mv: ne peut évaluer `': Aucun fichier ou répertoire de ce type
qsdsqd2.jpg_1001_qsdsqd2.jpg
mv: ne peut évaluer `': Aucun fichier ou répertoire de ce type
gotcha5832 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2010, 11h59   #5
Nouveau Membre du Club
 
Inscription : septembre 2004
Messages : 225
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 225
Points : 35
Points : 35
Envoyer un message via MSN à gotcha5832
concernant la soluce de syjis

Citation:
[sacha@localhost ~/Bureau/images]$ reductiontest.sh
/bin/reductiontest.sh: line 39: /usr/bin/date: Aucun fichier ou répertoire de ce type
.__qsdsqd2.jpg
gotcha5832 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2010, 12h03   #6
Nouveau Membre du Club
 
Inscription : septembre 2004
Messages : 225
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 225
Points : 35
Points : 35
Envoyer un message via MSN à gotcha5832
pour la soluce de syjis
j'ai modifier:
DATE="$(/usr/bin/date '+%d%m')_"
par
DATE="$(date '+%d%m')_"

ce qui fonctionne mais l'echo me donne:
._0601_qsdsqd2.jpg
ce qui ne m'avance pas beacoup.
gotcha5832 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2010, 12h20   #7
Expert Confirmé
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 1 897
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 897
Points : 3 677
Points : 3 677
bah, mv $file ... mais $file n'existe pas !

Code :
1
2
3
4
rep=$(pwd)
for image in $rep/*[jJ][pP][gG]
...
done
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2010, 12h32   #8
Nouveau Membre du Club
 
Inscription : septembre 2004
Messages : 225
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 225
Points : 35
Points : 35
Envoyer un message via MSN à gotcha5832
effectivement.

a force de mélanger des bout de code...

à part ceci mon plus gros souci est surtout de pouvoir récupérer le nom de mon dossier

sachant que mon script en sous /bin en exécutable et que donc je le lance depuis un autre dossier.

si je le lance de
Citation:
/home/sacha/Bureau/images/test image 2/
je voudrais récupérer test_image_2
et c'est la dessus que je bute.
récupérer la chaine complète avec pwd pas de souci mais récupérer juste des dernier dossier la je peche.
gotcha5832 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2010, 13h21   #9
Nouveau Membre du Club
 
David
Inscription : avril 2009
Messages : 26
Détails du profil
Informations personnelles :
Nom : David
Âge : 40

Informations forums :
Inscription : avril 2009
Messages : 26
Points : 27
Points : 27
Avec ma solution, essai :
Code :
DOSSIER="$(basename $(pwd))_"
et avec la solution de N_BaH
Code :
1
2
3
CHEMIN_ABSOLU="$(pwd)"
REP=${CHEMIN_ABSOLU##*/}
echo $REP
syjis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2010, 13h23   #10
Expert Confirmé
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 1 897
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 897
Points : 3 677
Points : 3 677
Code ~/bin/reduction_test :
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash

jourmois=$(date +'%d%m')
rep=$(pwd)
for image in "$rep"/*[jJ][pP][gG]; do
   ((++num))
   rep="${image%/*}"
   rep="${rep##*/}"
   rep="${rep// /_}"
   image="${image##*/}"
   printf '%s_%s_%.4d_%s\n' ${rep} ${jourmois} ${num} $image #on dit merci à Fred
done
Code :
1
2
3
4
5
6
7
8
9
~/$ ls mon_rep/images\ test\ 2/
fichier1.jpg  fichier2.jpg  fichier3.jpg  fichier4.jpg  fichier5.jpg
~/$ cd mon_rep/images\ test\ 2
~/mon_rep/images test 2/$../../bin/reduction_test 
images_test_2_0601_0001_fichier1.jpg
images_test_2_0601_0002_fichier2.jpg
images_test_2_0601_0003_fichier3.jpg
images_test_2_0601_0004_fichier4.jpg
images_test_2_0601_0005_fichier5.jpg

Dernière modification par N_BaH ; 06/01/2010 à 17h27. Motif: utilisation de printf au lieu de echo
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2010, 17h09   #11
Nouveau Membre du Club
 
Inscription : septembre 2004
Messages : 225
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 225
Points : 35
Points : 35
Envoyer un message via MSN à gotcha5832
Mille merci à vous,
Mais je sais pas pourquoi mais ca marche pas chez moi:
scriptbah.sh
Code :
1
2
3
4
5
6
7
8
9
jourmois=$(date +'%d%m')
currep=$(pwd)
for image in $currep/*[jJ][pP][gG]; do
   ((++num))
   rep="${image%/*}"
   rep="${rep##*/}"
   image="${image##*/}"
   printf '%s_%s_%.4d_%s\n' ${rep} ${jourmois} ${num} $image #on dit merci à Fred
done
Citation:
[sacha@localhost ~/Bureau/image test]$ ls
image1.JPG* image2.jpg*
[sacha@localhost ~/Bureau/image test]$ scriptbah.sh
Bureau_0601_0001_image
test_0601_0002_image1.JPG
image2.jpg__0000_

et pour la soluce syjis
Code :
1
2
3
4
5
6
7
DATE="$(date '+%d%m')_"
for IMAGE in $(find  $REP -name "*.jpg")
do
   DOSSIER="$(basename $(pwd))_"
   FIC="$(basename $IMAGE)"
   echo "$DOSSIER$DATE$FIC"
done
Citation:
[sacha@localhost ~/Bureau/image test]$ ls
image1.JPG* image2.jpg*
[sacha@localhost ~/Bureau/image test]$ scriptsyjis.sh
image_0601_image2.jpg

Donc je comprend pas ce qui déconne chez moi...
Ce que je cherche à avoir est
image_test_0601_image2.jpg

En tout les cas mille merçi encore pour votre aide.
gotcha5832 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2010, 17h25   #12
Expert Confirmé
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 1 897
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 897
Points : 3 677
Points : 3 677
Je viens de mettre à jour mon script au-dessus de ton message...
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2010, 17h44   #13
Nouveau Membre du Club
 
Inscription : septembre 2004
Messages : 225
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 225
Points : 35
Points : 35
Envoyer un message via MSN à gotcha5832
Par défaut MERCI

NIKEL...
ca fonctionne je vous remercie tous et en particulier:
N_BaH

donc voncçi mon script complet:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# Nom du nouveau répertoire
NV_DOSSIER=reduc
 
# Création du nouveau dossier s'il n'existe pas
if [ -d $NV_DOSSIER ] ;
then
echo "Le dossier reduc existe déjà"
else
mkdir $NV_DOSSIER
fi
 
# Pour toutes les photos (JPG) du répertoire
for i in *.[jJ][pP][gG] ;
do
# Réduit l'image en 601x400
convert "$i" -resize 601x400  "$NV_DOSSIER/$i"
# fusione l'image avec un calque contenant les coins
composite -gravity center /home/sacha/Bureau/cadre.png "$NV_DOSSIER/$i" "$NV_DOSSIER/$i"
# fin de la boucle FOR
done 
rep=$(pwd)
cd "$NV_DOSSIER" 
# mise a zero (1) du compteur
num=1
jourmois=$(date +'%d%m')
 
for image in "$rep"/*[jJ][pP][gG]; do
   ((++num))
   rep="${image%/*}"
   rep="${rep##*/}"
   rep="${rep// /_}"
   image="${image##*/}"
nv_nom=$(printf '%s_%s_%.4d_%s\n' ${rep} ${jourmois} ${num} $image) #on dit merci à Fred
mv "$image" $nv_nom 
done
Enfin complet il me reste encore du boulot, mais voilà déjà un bonne partie de faite.
gotcha5832 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 02h25.


 
 
 
 
Partenaires

Hébergement Web