Aller au contenu

Photostation.rename.file : Renommer Les Photos Fonction De Leurs Date


Messages recommandés

j'en profite egalement pour faire part d'un nouveau probleme....

hier soir, j'ai commencer a dater les photos qui n'avait pas de timestamp. et j'ai trouvé ca assez long pour au final peut de dossier traité.

du coup, je vais rajouter une fonction dans le script qui regarde le nom du dossier parent et s'il est de la forme 2014-12-31, je rentre la date correspondante dans le fichier...

sauf que:

exiv2 -M"add Exif.Image.DateTime 2010:12:12" pochette_93_350.jpg 

me retourne:

exiv2 -pv pochette_93_350.jpg
0x0132 Image DateTime Ascii 11 2010:12:12
0x9003 Image DateTimeOriginal Ascii 11 2010:12:12
0x9003 Image DateTimeOriginal Ascii 11 2099:12:12
0x9003 Image DateTimeOriginal Ascii 11 2099:12:12 

donc j'ai bien le Datetime correspondant (et aussi plusieurs essai de datetimeoriginal...)

mais ca ne semble pas etre vu apres comme une date de prise de vue... et du coup, meme en utilisant datetimeoriginal, je n'arrive pas a la renomer...

une idée sur comment entrer une date?

Modifié par nexius2
Lien vers le commentaire
Partager sur d’autres sites

j'ai trouvé....

il faut mettre Image.DateTime et Photo.DateTimeOriginal. ca marche a la mano, mais je doit avoir une erreur lors du lancement du script a cause des variables je pense...

exiv2 -M"add Exif.Image.DateTime $foldyearok:$foldmonthok:$folddayok $DEFAULT_TIME" $line
exiv2 -M"add Exif.Photo.DateTimeOriginal $foldyearok:$foldmonthok:$folddayok $DEFAULT_TIME" $line
Lien vers le commentaire
Partager sur d’autres sites

d'apres tout mes tests, ca semble OK.
je n'ai maintenant plus qu'a traité le cas d'une image qui retourne un "No Exif data found in the file "

sur ce bout de script:

    IFS=': '
    set $(exiv2 -g Exif.Image.DateTimeOriginal -Pv "$line")
    unset IFS
    year=$1 month=$2 day=$3 hour=$4 minute=$5 second=$6

je pense qu'il faudrait changer la facon de proceder et lire le resultat avec un "read" peut etre. comme ca, si je n'ai pas de resultat, je sais qu'il n'y a pas d'exif...mais je tatonne, je decouvre read :-)

Modifié par nexius2
Lien vers le commentaire
Partager sur d’autres sites

je travail actuellement sur la V0.6 qui doit renommer le fichier s'il n'a pas de date et si le dossier parent a un nom correct.... mais je seche....ca marche.... pas toujours....

#!/bin/ash
###########################################################################################
#........................... Script pour renommer les Photos..V0.6 .......................#
#.........................................................................................#
#............... Permet de renommer les fichiers jpg par leur date de prise de vue........#
#                                                                    					  #
#                                   Version 0.1 Nexius2                                   #
#       renomme les fichier JPG d'un repertoire fonction de la date de prise de vue       #
#                                   Version 0.2 CoolRaoul                                 #
#                       correction de la comparaison fichier / date                       #
#                                   Version 0.3 Nexius2                                   #
#     modification des logs de sortie pour plus de clareté sur les fichiers sans date     #
#                                   Version 0.4 Nexius2                                   #
#                                 plus sensible a la case                                 #
#                                   Version 0.5 Nexius2                                   #
#                                Correction de bug du log                                 #
#                                   Version 0.51 Nexius2                                  #
#                      Correction de bug de recuperation de date                          #
#                                   Version 0.6 Nexius2                                   #
#                      ajout de la fonction rajout de date si non presente                #
###########################################################################################
###########################################################################################
#                                    Paramettre du script                                 #
###########################################################################################
rep="/volume1/Temp/photos/test/" # repertoire de stockage des photos
ADD_DATE_IN_LOG="Yes" # mettre Yes pour afficher la date dans le log
ADD_DATE_IN_PHOTO="Yes" # mettre Yes pour rajouter une date sur une photo en fonction du nom du dossier parent si la photo n'a pas de date
LOG_PATH=/volume1/Temp/ # chemin du log
LOG_NAME=PhotoStation.rename.file.sh # nom du fichier log
DEFAULT_MONTH=06
DEFAULT_DAY=15
DEFAULT_TIME="06:00:00"


NOW=$(date +"%F") # declaration de la date - ne pas changer
PATH=/bin:/usr/bin:/usr/syno/bin # important si lancé en cron
###########################################################################################
#                               declaration du nom des logs                               #
###########################################################################################
if [ "$ADD_DATE_IN_LOG" == "Oui" ] || [ "$ADD_DATE_IN_LOG" == "Yes" ] || [ "$ADD_DATE_IN_LOG" == "Y" ] || [ "$ADD_DATE_IN_LOG" == "O" ];
	then
		LOG_FILE=$LOG_PATH$LOG_NAME.$NOW".log"
		LOG_FILE_NO_EXIF=$LOG_PATH$LOG_NAME"_NO_EXIF."$NOW".log"
		LOG_FILE_ADDED_DATE=$LOG_PATH$LOG_NAME"_DATE_ADDED."$NOW".log"
	else
		LOG_FILE=$LOG_PATH$LOG_NAME".log"
		LOG_FILE_NO_EXIF=$LOG_PATH$LOG_NAME"_NO_EXIF.log"
		LOG_FILE_ADDED_DATE=$LOG_PATH$LOG_NAME"_DATE_ADDED.log"
fi	
{
###########################################################################################
#                              recherche des fichiers	                                  #
###########################################################################################
#find "$rep" -iname "*.jpg" -o -iname "*.bmp" -o -iname "*.png" ! -path "*/#recycle/*" ! -path "*/@*" |  
find "$rep" -iname "*.jpg" ! -path "*/#recycle/*" ! -path "*/@*" |  
while read line
do 
	###########################################################################################
	#                               on recuper le nom du fichier	                          #
	###########################################################################################
    filename=${line##*/}
    filename=${filename%.*}
	year=0
	echo "nom du fichier" 
	echo $line 
	echo "date de year par defaut: $year" 

	###########################################################################################
	#                         recuperation de la date du fichier	                          #
	###########################################################################################
	#local data_info
    IFS=': '
    set $(exiv2 -g Exif.Photo.DateTimeOriginal -Pv "$line")
	#read data_info <<< "$(exiv2 -g Exif.Image.DateTimeOriginal -Pv "$line")"
	#echo $data_info | tee -a /volume1/Temp/errorlevel.log
	# test de recuperation du errorlevel
    unset IFS
    year=$1 month=$2 day=$3 hour=$4 minute=$5 second=$6
	echo "date de year apres demande exif : $year" 
	#echo $year | tee -a /volume1/Temp/errorlevel.log
    
	
	#on recupere l'exif
	#Exiv2::ExifData &exifData = image->exifData()
	###########################################################################################
	#                             si le fichier n'a pas de date	                              #
	###########################################################################################
	# test valeur de year ($1)
	# echo $1 1>&2 /volume1/Temp/date.log
	if [ -z $1 ] || [ $1 == "0000" ] || [ -z $year ];
		then
			echo "on va essayer de le renommer" 
			###########################################################################################
			#                          est ce qu'on ajoute la date au fichier                         #
			###########################################################################################
			if [ "$ADD_DATE_IN_PHOTO" == "Oui" ] || [ "$ADD_DATE_IN_PHOTO" == "Yes" ] || [ "$ADD_DATE_IN_PHOTO" == "Y" ] || [ "$ADD_DATE_IN_PHOTO" == "O" ];
				then
					###########################################################################################
					#                              on ajoute la date au fichier                               #
					###########################################################################################
					#on recupere le nom du dossier parent
					parentpath=$(dirname "$line")
					parentdir=$(basename "$parentpath")
					#on isole l'année le mois et la jour du dossier parent / dossier type 2014-12-31
					foldyear="${parentdir:0:4}"
					foldmonth="${parentdir:5:2}"
					foldday="${parentdir:8:2}"
					# au cas ou le dossier ne soit pas bien nommer
					# on verifie que les valeurs recuperer soit bonne
					echo "date du dossier parent : $foldyear-$foldmonth-$foldday" 
					if [ "$foldyear" -lt 9999 ] && [ "$foldyear" -gt 0001 ];
						then
							foldyearok=$foldyear
							if [ "$foldmonth" -lt 12 ] && [ "$foldmonth" -gt 01 ];
								then
									foldmonthok=$foldmonth
								else
									foldmonthok=$DEFAULT_MONTH
							fi
							if [ "$foldday" -lt 31 ] && [ "$foldday" -gt 01 ];
								then
									folddayok=$foldday
								else
									folddayok=$DEFAULT_DAY
							fi
							#on rajoute la date au fichier
							echo "affiche la date confirmer avant ajout au fichier : $foldyearok-$foldmonthok-$folddayok $DEFAULT_TIME" 
							#echo "$foldyearok-$foldmonthok-$folddayok $DEFAULT_TIME" | tee -a /volume1/Temp/errorlevel.log
							#ligne suivante a mettre uniquement apres un test de manque de Exif.Image.DateTime
							#exiv2 -M"add Exif.Image.DateTime $foldyearok:$foldmonthok:$folddayok $DEFAULT_TIME" "$line"
							exiv2 -M"add Exif.Photo.DateTimeOriginal $foldyearok:$foldmonthok:$folddayok $DEFAULT_TIME" "$line" 
							#ligne suivante a mettre uniquement apres un test de manque de Exif.Photo.DateTimeDigitized
							#if [ -z $(exiv2 -g Photo.DateTimeDigitized -Pv "$line")];
							#	echo "on ajoute Photo.DateTimeDigitized" 
							#	then exiv2 -M"add Exif.Photo.DateTimeDigitized $foldyearok:$foldmonthok:$folddayok $DEFAULT_TIME" "$line"
							#fi
						else
							echo "dossier pas pris en compte" 
							echo "dossier mal nommé pour: " $line | tee -a $LOG_FILE_ADDED_DATE
					fi 
				else
					###########################################################################################
					#                          on log pour savoir qui n'a pas de date                         #
					###########################################################################################
					echo "no Exif data found in: "$line | tee -a $LOG_FILE_NO_EXIF
					echo "pas de exif dans le fichier" 
			fi
		else
		###########################################################################################
		#                      on test si le fichier porte deja un nom correct	                  #
		###########################################################################################
		case $filename in 
			"$1-$2-$3_$4-$5-$6"*)
				echo "not remaning $line" 
				echo "on renomme pas le fichier est deja bon" 
				: le nom est OK
				;;
			*)
				###########################################################################################
				#                                  on renomme le fichier	                              #
				###########################################################################################
				echo "renaming $line" 
				exiv2 -fF -r "%Y-%m-%d_%H-%M-%S" "$line"; # essayer avec :parentname
				echo "le fichier est renommer" 
				;;
		esac
	fi
	echo "_______________________________________________________________________________________________________________________________________________________________" 
done
#echo "_______________________________________________________________________________________________________________________________________________________________" | tee -a /volume1/Temp/errorlevel.log
###########################################################################################
#                                      creation fichier log                               #
###########################################################################################
} > "$LOG_FILE"
Lien vers le commentaire
Partager sur d’autres sites

ouf, j'arrive enfin a avoir quelque chose de fonctionnel..... au detail pret que l'outil exiv2 ne lit pas tout les formats et me retourne beaucoup d'erreur sur des photos prisent avec des nikon ou d'autre type d'appareil.....

il faut que je test exiftool pour voir si c'est mieux.... mais du coup, je pense de plus en plus a faire une sorte de package...

faudrait que je regarde en parallele si on peux ajouter des programme dans les packages et quel serait alors le meilleur language pour ce genre de taches....

Modifié par nexius2
Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.