cd $REPERTOIRE_SOURCE
for I in *
do echo "Redimensionnement de : "$VERT" $I""$NORMAL"
convert -filter Cubic -resize $imgsize $I $I
done
sleep 2
echo "changement des noms de fichier en cour"
for i in *
do mv $i `echo $i | tr [:upper:] [:lower:]`; done
Mon problème est que le passage de MAJ vers MIN ce fait sur la totallité du nom de fichier, je voudrait que cela ne se fasse que sur l’extension . est-ce possible ?
Je voudrai renommer le fichier de sortie avec la date du jour (incrémentant chaques photos d’un chiffre ex : 13_09_2011_1 ou A-B-C etc…) du traitement, en fin de script, sachant que j’ai cette variable dans mon script :
enfin que tout les fichiers traités, soient transfèrés dans un dossier nomé à la date du jour (le même que celui des fichiers traités mais sans l’incrémentation…)
Ca bouchonne un peut dans ma tête et je vois pas comment procéder, quelqu’un aurait l’amabilité de bien vouloir me dire comment procéder ?
2 petites fonctions qui peuvent t’aider.
La première permet de renommer des fichiers avec une racine suivie d’un numéro :
#=========================================
#echo "Renommage des fichiers, nombre de fichiers a traiter : $#"
num=0
(while [ $# -gt 0 ]; do
type=`echo $1 | cut -f2 -d"."`
let "compteur += 1"
num=$(($num+1))
if [ $num -gt 0 ] && [ $num -lt 10 ]; then # pour les paramètres 1 à 9
numero=00$num # rajouter 2 digit => 001, 002, 003,..., 009
fi
if [ $num -gt 9 ] && [ $num -lt 100 ]; then # pour les paramètres 10 à 99
numero=0$num # rajouter 1 digit => 010, 011, 012,..., 099
fi
if [ $num -gt 100 ] ; then # pour les paramètres supérieur à 100
numero=$num # ne pas rajouter de digit => 100, 101, 102,...
fi
#echo "Renomage de $1 en $NouvNom-$numero.$type"
mv $1 $NouvNom-$numero.$type
let "progress = compteur*100/nbfiles"
echo $progress
shift
done
) | zenity --progress --auto-close --title="$title" --text="$msg_renomm" --percentage=0
La deuxieme est utilisée pour l’import de mes photos en les classant dans un dossier en fonction de la date de la photo
function fct_lire_date_exif ()
{ # Lecture de la date de creation de la photo
#DatePhoto=`jhead $1 | grep Date | awk '{print $3}' | sed "s/:/ /g" `
DatePhoto=`exiv2 $1 | grep timestamp | awk '{print $4}' | sed "s/:/ /g" `
if [[ "$DatePhoto" == "" ]]
then
echo -e "-I-> Il n'y a pas de date de prise de vue dans $1, utilisation de la date du fichier."
echo -e "-D-> Creation des donnees Exif minimale et initalisation de la date exif a la date du fichier."
jhead -mkexif -dsft $1
fi
#Repertoire ou doivent être enregistrees les photos
Annee=`echo $DatePhoto | awk '{print $1}'`
Mois=`echo $DatePhoto | awk '{print $2}'`
Jour=`echo $DatePhoto | awk '{print $3}'`
RepDest=`echo "$RepImages/$Annee/$Annee-$Mois-$Jour"`
if [[ ! -d $RepDest ]]
then
echo -e "\n-I-> Creation du repertoire $RepDest."
mkdir -p $RepDest
fi
#echo "\n-I-> Copie et renommage de $1 "
echo -e " .\c"
cp $1 $RepDest/$1
exiftran -ai $RepDest/$1 # rotation de la photo dans le bon sens
exiv2 mv $RepDest/$1
}
[quote=« MisterFreez »]
C’est dommage d’avoir à utiliser tr, mais il me semble qu’il n’existe pas d’autres moyens.[/quote]
Si bash >=4 :
$ foo="un petit texte"
$ echo ${foo^}
Un petit texte
$ echo ${foo^^}
UN PETIT TEXTE
$ echo ${foo^^t}
un peTiT TexTe
$ foo="DES MAJUSCULES"
$ echo ${foo,,}
des majuscules
[quote=« MisterFreez »]Voila qui devrait faire l’affaire à la place du code que tu as donné au premier message :
cd "$REPERTOIRE_SOURCE"
date="$(date +%d_%m_%Y)"
mkdir -p "$date"
i=1
for I in * ; do
echo "Redimensionnement de : $VERT $I $NORMAL"
ext="$(echo ${I##*.} | tr [:upper:] [:lower:])"
out="$date/${date}_$i.$ext"
while [ -f "$out" ]; do
((++$i))
out="$date/${date}_$i.$ext"
done
convert -filter Cubic -resize $imgsize $I "$out"
((++$i))
done
[/quote]
,desolé, je tourne en rond, il démarre même pas , avec ta modif ! le MKDIR dit qu’il à peux créer le rep car il existe pas … (c’est sûr puis ce que on veut qu’il le créer…) et quand je mmodifie en faisant :
[quote=“Totor”][quote=“MisterFreez”]
C’est dommage d’avoir à utiliser tr, mais il me semble qu’il n’existe pas d’autres moyens.[/quote]
Si bash >=4 :
$ foo="un petit texte"
$ echo ${foo^}
Un petit texte
$ echo ${foo^^}
UN PETIT TEXTE
$ echo ${foo^^t}
un peTiT TexTe
$ foo="DES MAJUSCULES"
$ echo ${foo,,}
des majuscules
[/quote]
Nickel même si je trouve que c’est vraiment pas gérable comme syntaxe (vouloir utiliser des caractères autres que des lettres à tout les coups c’est moins lisible et plus limité).
[quote=« chris38 »] ,desolé, je tourne en rond, il démarre même pas , avec ta modif ! le MKDIR dit qu’il à peux créer le rep car il existe pas … (c’est sûr puis ce que on veut qu’il le créer…) et quand je mmodifie en faisant :
mkdir -p "/mon_rep/test/$date"
il s’arrête.[/quote]
Ajout un -x dans le shabang pour voir ce qu’il fait.
Redimensionnement de : SL183106.JPG
convert: unable to open image `/_1.jpg': @ error/blob.c/OpenBlob/2489.
/home/chris/Documents/Scripts/Img/red_img8.sh: 76: ++1: not found
Redimensionnement de : SL183107.JPG
convert: unable to open image `/_1.jpg': @ error/blob.c/OpenBlob/2489.
/home/chris/Documents/Scripts/Img/red_img8.sh: 76: ++1: not found
.......................
Et le sript :
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"
JAUNE="\\033[1;33m"
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" | sed -e "/\.$/d" | wc -l)
echo "$VERT""$var"
sleep 2
if [ $var -eq 0 ]
then
echo "$ROUGE""$rep_vide""$NORMAL"
echo "Fermeture du programme"
sleep 5
exit
fi
title="Choose which sizes to scale to"
imgsize=`zenity --title "$title" --list --separator=" " --column="size" "160x120" "320x240" "640x480" "800x600" "1024x768" `
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
#transforme 640x480 en 640x640 for convert to respect proportions
himgsize=$imgsize
val1=`echo "$imgsize" | awk -F'x' '{ print $1 }'`
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
mkdir -p "$date"
i=1
for I in * ; do
echo "Redimensionnement de : $VERT $I $NORMAL"
ext="$(echo ${I##*.} | tr [:upper:] [:lower:])"
out="$date/${date}_$i.$ext"
while [ -f "$out" ]; do
((++$i))
out="$date/${date}_$i.$ext"
done
convert -filter Cubic -resize $imgsize $I "$out"
((++$i))
done
Pour le -x qui marche pas t’utilise quoi comme shell ? Parce que c’est censé fonctionner sous dash, bash et zsh (je pense que ça marche même sous tcsh).
J’ai compris. Tu peux tout résoudre en remplaçant ça :
i=1
for I in * ; 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"
i=$((++$i))
done
par ça
i=1
for I in *.[jJ][pP][gG] *.[pP][nN][gG] *.[tT][iI][fF][fF] *.[bBmMpP] ; do
echo "Redimensionnement de : $VERT $I $NORMAL"
ext="$(echo ${I##*.} | tr [:upper:] [:lower:])"
out="$date/${date}_$i.$ext"
while [ -f "$out" ]; do
i=$(expr $i + 1)
out="$date/${date}_$i.$ext"
done
convert -filter Cubic -resize $imgsize $I "$out"
i=$(expr $i + 1)
done
J’aime pas l’arithmétique en shell, je dois toujours m’y reprendre plusieurs fois pour faire un truc qui marche.
Si Totor (ou quelqu’un d’autre) a mieux qu’il n’hésite pas à donner sa solution, je suis pas inspiré.
Pareil pour le :*.[jJ][pP][gG] *.[pP][nN][gG] *.[tT][iI][fF][fF] *.[bBmMpP]
Juste une petite suggestion pratique concernant le format des dates…
Dû à la façon dont les ordinateurs trient les fichiers et dossiers, il est souvent beaucoup plus facile de retrouver dans une grande liste un fichier/dossier nommé selon un format yyyy-mm-dd plutôt que dd-mm-yyyy. Surtout quand le postulat de départ est, comme souvent, quelque chose du genre « Hmm, ça devait être vers début mai je crois… »
Sinon, pour rechercher l’indice suivant à utiliser, tout dépend ce que l’on recherche à faire. Ta solution permet de combler les “blancs”.
Si l’on veut trouver le plus grand disponible:
avantages :
pas besoin de répéter l’action pour chaque fichier
on conserve un ordre chronologique
pour l’histoire des noms de fichier :
printf '%s\n' *.*|egrep -i '\.(jpg|png|tiff|bmp)$'|while read I
do
...
done