Bonjour,
@ecatomb
Ton script change la date de création du fichier, donc pas de problème pour un classement dans le finder qui utilise cette date, mais l'application photo utilise la date exif de la prise de vue, donc pas de classement dans photo.
@Ralfix
Dans l'exemple que tu donnes, la date réelle de la prise de vue est 1998 ou 2004 ?
Je suppose que 2004 est la date à laquelle la photo à été scannée et mise sur l'ordi.
Dans ce cas il faut créer la date de prise de vue dans les exif de la photo, ceci ne peut se faire que si les fichiers sont sorti de l'application photo et mis dans des dossiers sur le finder.
ci-dessous un script (applescript) qui ferait le job.
A son lancement il te demande de choisir le dossier a traiter.
-il traite tous les fichiers du dossier et de ses sous dossier
-il vérifie si le fichier contient déjà une date de prise de vue, si oui, il se sert de cette date pour remplacer la date du fichier.
-sinon il récupère dans le nom, la date, qui doit être au format "AAAA-MM-JJ_xxxxxx", il ajoute 12h00mn00sec et il cré une date de prise de vue et remplace la date du fichier.
Il crée sur le bureau un fichier texte "date trouvée.txt" contenant la liste des fichiers dont la date existait déjà, et un fichier texte "date erreur.txt" contenant la liste des fichiers dont il n'a pas pu extraire la date du nom.
Bloc de code:
-- remplace date du fichier par la date exif creation ou par la date du nom avant le premier "_"
tell application "Finder"
set Chemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers à redater"
my inspecter(Chemin)
end tell
on inspecter(un_dossier)
tell application "Finder"
-- traitement des fichiers :
set les_fichiers to files of un_dossier
repeat with chaque_fichier in les_fichiers
-- traitement d'un fichier
set lefichier to chaque_fichier
set AppleScript's text item delimiters to {""}
set nom to name of chaque_fichier --récupère le nom du fichier
set chaque_fichier to chaque_fichier as string --chemin du fichier
set unedate to true --initialise le flag date trouvée
try
--récupère la date si elle existe
set datephoto to do shell script "/usr/local/bin/exiftool -DateTimeOriginal " & quoted form of POSIX path of chaque_fichier
if datephoto is "" then set datephoto to do shell script "/usr/local/bin/exiftool -CreationDate " & quoted form of POSIX path of chaque_fichier
if datephoto is "" then set datephoto to do shell script "/usr/local/bin/exiftool -CreateDate " & quoted form of POSIX path of chaque_fichier
if datephoto is "" then
set unedate to false --vérifie si date trouvée
end if
on error
set unedate to false -- si erreur dans la récup de date
set datephoto to ""
end try
if length of datephoto > 20 then
--mise en forme de la date récupérée
set x to (length of datephoto) - 33
set DateOriginale to text -x thru -1 of datephoto
set ladate to text 1 thru 5 of DateOriginale
set lannee to ladate
set ladate to ladate & text 7 thru 8 of DateOriginale
set lemois to text 7 thru 8 of DateOriginale
set ladate to ladate & text 10 thru 11 of DateOriginale
set lejour to text 10 thru 11 of DateOriginale
set ladate to ladate & text 13 thru 14 of DateOriginale
set lheure to text 13 thru 14 of DateOriginale
set ladate to ladate & text 16 thru 17 of DateOriginale
set lesminutes to text 16 thru 17 of DateOriginale
set ladate to ladate & "." & text 19 thru 20 of DateOriginale
set lessecondes to text 19 thru 20 of DateOriginale
set newnom to lannee & "-" & lemois & "-" & lejour & " " & lheure & "." & lesminutes & "." & lessecondes
set xxx to ladate as string --vérifie sidate trouvée est 000
if xxx is " 000000000000.00" then
set unedate to false
else
-- remplace date fichier par date originale et écrit dans fichier log
do shell script "touch -t " & ladate & " " & quoted form of POSIX path of chaque_fichier
set lelog to open for access ((path to desktop folder as text) & "Date trouvée.txt") as text with write permission
write "Le fichier avait une date originale: " & DateOriginale & " " & chaque_fichier & return to lelog starting at eof
close access lelog
end if
end if
if unedate is false then
--récupère la date du nom
set nb to ""
set madate to ""
set nom to nom as string
set sauv to AppleScript's text item delimiters --sauvegarder la variable delimiteur
set AppleScript's text item delimiters to {"_"} --récupère la partie avant le premier "_"
set ladate to text item 1 of nom
set AppleScript's text item delimiters to {"-"}
set nb to offset of "-" in nom
if nb is not 0 then
set annee to text item 1 of ladate
set mois to text item 2 of ladate
set jour to text item 3 of ladate
set madate to annee & mois & jour
set madate to madate & "1200.00"
set commande1 to "/usr/local/bin/exiftool -datetimeoriginal=" & madate & " " & quoted form of POSIX path of chaque_fichier
set commande2 to "/usr/local/bin/exiftool -createdate=" & madate & " " & quoted form of POSIX path of chaque_fichier
end if
set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
try
--ecrit dans les exif la date du nom
do shell script commande1
do shell script commande2
do shell script "touch -t " & madate & " " & quoted form of POSIX path of chaque_fichier
do shell script "rm " & quoted form of POSIX path of (chaque_fichier & "_original")
on error
--si date du nom est erreur écrit un log
set lelog to open for access ((path to desktop folder as text) & "Date erreur.txt") as text with write permission
write "Le nom fichier ne possède pas de date: " & chaque_fichier & return to lelog starting at eof
close access lelog
end try
end if
end repeat
-- traitement des dossiers :
set les_dossiers to folders of un_dossier
repeat with chaque_dossier in les_dossiers
-- traitement d'un dossier
my inspecter(chaque_dossier)
end repeat
end tell
end inspecter
tell application "Finder"
(display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell