10.10 Yosemite Trier ses photos par date de prise de Vue dans le finder

Clem.PET

Membre enregistré
16 Novembre 2021
7
0
22
Je n'arrive pas à trier mes photos selon leur date de prise de vue. En effet après les avoir retouchées, elles ont toutes la meme date de création, de modification ou d'ajout.

J'aimerais pouvoir trier mes photos selon les données EXIF qu'elles comporte (tel que la date de prise de vue).


Si quelqu'un connait une commande, un plugin, mais tout en restant dans le finder, je suis preneur.



Merci d'avance
C.P
 
une recherche rapide tombe sur un script pour renommer les fichier en rajoutant la date EXIF en début de nom de fichier:
il faudrait voir ce qu'en pense Zeltron54 qui semble être le pro du script …
 
Bonjour,
Je réponds un peu en dehors du cadre donné: j'apprécie beaucoup l'interface de GraphicConverter qui offre beaucoup d'outils de tris, recherches, modifs des données EXIF, visualisation des photos sur une carte, etc., tout en laissant entière maîtrise sur l'organisation des fichiers (contrairement à Apple Photo, Lightroom...).
Il y a beaucoup d'outils d'édition aussi. Si comme moi tu n'as pas besoin de tant de choses, ça ressemble à un bazooka pour tuer une mouche, mais finalement je n'ai pas trouvé d'équivalent pour les choses dont j'ai besoin. Et apprès tout, les fonctions "en trop" ne gênent pas si on ne les utilise pas ! ;)
Et même la dernière version reste compatible avec OS X 10.9 Mavericks (donc forcément avec Yosemite).
La page en anglais de l'éditeur: https://www.lemkesoft.de/en/products/graphicconverter/
et une rapide présentation en français chez un distributeur: https://macvf.fr/produit-graphicconverter11
 
  • J’aime
Réactions: baron
Bonjour,

@Clem.PET

J'ai écrit quelques scripts Applescript qui permettent de résoudre ce problème.
En fonction de ce que tu veux obtenir je pourrais te conseiller un script (qui est déjà sur ce forum).

-S'agit' il de photos, ou de vidéos ou les deux ?

-Juste changer la date du fichier , qui est celle utilisée par le finder pour trier, par la date de prise de vue.
-En plus de changer la date, renommer les photos avec la date de prise de vue de la photo... avec quel format de date ???
-Ou autres ?

Je pourrais t'adapter le script suivant tes besoins...
Le post est là https://forums.macg.co/threads/perte-des-dates-des-photos.1294818/page-4

Attention il faut installé le petit programme exiftool pour utiliser lescript à télécharger là ExifTool-12.35.dmg
 
Dernière édition:
effectivement c'est encore plus simple en remplaçant la date du "fichier Finder" par la date de la photo elle même …
zeltron54 King of the script !!!
 
WhAA, mais vous etes les boss,

Déjà, merci pour votre réactivité.
Et dcp ce que j'aimerais faire ce serai ajouter devant chaque nom de ficher (photos et vidéo), la date à laquelle elle a été prise (au format (annéemoisjour) comme ca je pourrais ensuite retrier par "Nom".

Je sais pas si c'est possible de faire ça simplement et rapidement (genre jsp en faisant clic droit renommer avec ''..." et hop tout est renommée . ou en glissant déposant toutes les photos dans le terminal et ensuite le terminal me les renvois direct renommée, ou avec une petit appli simple)

voilà.

Merci encore
 
Bonjour,

Il te faut d'abord télécharger EXITOOL là ExifTool-12.35.dmg
Tu ouvres l'image disque (double clic) puis dans la fenêtre qui s'ouvre tu exécutes le " ExifTool-12.35.pkg " cela installe la commande exiftool dans le mac.

ensuite tu ouvres "Editeur de script" qui est dans applications-->Utilitaires, Tu choisis -->nouveau document en bas à gauche.
Dans la fenêtre qui s'ouvre tu fais un copié, collé du script ci-dessous.

Pour exécuter ce script tu cliques sur le bouton Exécuter en haut à gauche.
Le script te demande de choisir le dossier à traiter, puis il change la date du fichier par la date de la prise de vue et il renomme tous les fichiers en ajoutant devant le nom la date de prise de vue au format AAAAMMJJ.

Attention il traite tous les fichiers du dossier et de ses sous dossier.

A la fin il te met un message comme quoi il a terminé.
Si lors du traitement il rencontre des erreurs il crée un fichier Erreur.txt sur le bureau avec le chemin des fichiers posant problème (1 par ligne).

Dis moi si tout fonctionne pour toi.
Un conseil fait un premier test avec une copie de quelques photos dans un dossier...


Bloc de code:
-- remplace date du fichier par la date exif creation et renomme les fichiers avec la date de création

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 extens to document file nom in un_dossier --recupere l extension du fichier
            set lextension to name extension of extens
            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 dernier "."
            set elements to text items of nom
            set nomcourt to (items 1 thru -2 of elements) as string
            set ancien_nom to nomcourt
            set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
            
            set chaque_fichier to chaque_fichier as string
            
            try
                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
                
                
            on error
                -- Ecrit un fichier erreur sur le bureau si erreur chargement date
                set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
                write "Le fichier ne contient pas de date  : " & chaque_fichier & return to lelog starting at eof
                close access lelog
                
                set datephoto to ""
            end try
            
            if length of datephoto > 20 then
                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 & " " & ancien_nom
                
                set xxx to ladate as string
                
                if xxx is " 000000000000.00" then
                    -- Ecrit un fichier erreur sur le bureau si erreur chargement date(=0000...)
                    set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
                    write "Le fichier ne contient pas de date : " & chaque_fichier & return to lelog starting at eof
                    close access lelog
                else
                    do shell script "touch -t " & ladate & " " & quoted form of POSIX path of chaque_fichier
                end if
            end if
            
            if datephoto is not "" then
                
                set aa to container of lefichier as string
                set numero to 1
                set lenewnom to newnom
                repeat
                    if exists aa & lenewnom & "." & lextension then
                        set lenewnom to newnom & "(" & numero & ")"
                        set numero to numero + 1
                    else
                        set newnom to lenewnom
                        exit repeat
                    end if
                end repeat
                set name of lefichier to newnom & "." & lextension
            else
                set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
                write "Le fichier ne contient pas de date  : " & chaque_fichier & return to lelog starting at eof
                close access lelog
            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
 
  • J’aime
Réactions: Berthold
content pour toi !
 
Merci zeltron54 pour ton script. J'ai regroupé mes photos depuis les années 2000 et pppffff
que de doublons, de fichiers qui ont perdu leurs dates !
Ton script est bien utile. Je l’exécute sous Monterey 12.6 mac m1.
Mercissss
 
Merci Zeltron54 pour ce script qui m'a beaucoup aidé.
J'ai cependant un problème que je ne sais pas comment régler.

J'utilise ce script à partir du mac pour renommer mes veilles photos et les remettre à la bonne date.
Pour les photos prises avec mon téléphone (samsung) j'utilise ton autre script qui ne fait que modifier la date de modification à partir de la date de prise de vue.
Je remarque qu'avec le premier script qui renomme, j'ai un espace qui se glisse en tant que premier caractère pour tous les fichiers renommés. Et ce sur des milliers de photos. Cela peut il être modifié sur le script ?
existe-t-il un moyen de supprimer ces espaces sur les photos déjà renommées ?

Merci par avance
 
Bonjour,
Tu parles de quel script (avec le premier qui renomme) !
Je veux bien regarder et chercher mais quoi? Et où ?

dés que j’ ai les éléments, je jette un œil
 
Bonjour,
Tu parles de quel script (avec le premier qui renomme) !
Je veux bien regarder et chercher mais quoi? Et où ?

dés que j’ ai les éléments, je jette un œil
Merci pour ton retour rapide.

Alors, j'utilise ExifTool avec le script présent à la fin de mon message pour redater et renommer mes photos:
(celui que tu avais posté le 18 novembre 2021).

Lorsque je l'utilise il redate parfaitement les photos et les renomme très bien mais avec un espace devant la date. Cela crée un problème de tri dans le Finder avec les photos provenant de mon ancien téléphone Android qui sont par défaut datées de la même manière mais sans l'espace.

Je voulais savoir si il était possible de supprimer cet espace qui s'insère au moment ou les fichiers sont renommés?

Je t'en remercie par avance :)

-- remplace date du fichier par la date exif creation et renomme les fichiers avec la date de création 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 extens to document file nom in un_dossier --recupere l extension du fichier set lextension to name extension of extens 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 dernier "." set elements to text items of nom set nomcourt to (items 1 thru -2 of elements) as string set ancien_nom to nomcourt set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur set chaque_fichier to chaque_fichier as string try 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 on error -- Ecrit un fichier erreur sur le bureau si erreur chargement date set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission write "Le fichier ne contient pas de date : " & chaque_fichier & return to lelog starting at eof close access lelog set datephoto to "" end try if length of datephoto > 20 then 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 & " " & ancien_nom set xxx to ladate as string if xxx is " 000000000000.00" then -- Ecrit un fichier erreur sur le bureau si erreur chargement date(=0000...) set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission write "Le fichier ne contient pas de date : " & chaque_fichier & return to lelog starting at eof close access lelog else do shell script "touch -t " & ladate & " " & quoted form of POSIX path of chaque_fichier end if end if if datephoto is not "" then set aa to container of lefichier as string set numero to 1 set lenewnom to newnom repeat if exists aa & lenewnom & "." & lextension then set lenewnom to newnom & "(" & numero & ")" set numero to numero + 1 else set newnom to lenewnom exit repeat end if end repeat set name of lefichier to newnom & "." & lextension else set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission write "Le fichier ne contient pas de date : " & chaque_fichier & return to lelog starting at eof close access lelog 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
 
Je viens de tester et effectivement, il y a un espace , personne ne m'avait fait remonter ce problème.

Je modifie le script !
Pour les fichiers déjà traiter avec un espace, je te fais un script pour le supprimer, une question est-ce que tous ces fichiers sont dans un dossier (sans dossier) ou avec des sous dossiers ?
 
Je te met un premier script qui enlève l'espace devant le nom de tous les fichiers contenus dans le dossier choisi et ses sous dossiers.
Bloc de code:
tell application "Finder"
    set Chemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers avec un espace en début"
    set les_fichiers to every file of entire contents of Chemin
    
    repeat with chaque_fichier in les_fichiers --supprime espace debut
        set nom to name of chaque_fichier
        if character 1 of nom is " " then
            set nb to count characters of nom
            set newnom to text 2 thru nb of nom
            set name of chaque_fichier to newnom
        end if
    end repeat
end tell

tell application "Finder"
    activate
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell

Et le script qui renomme modifié pour éviter l'espace en début de nom
Dis-moi si tout fonctionne !
Merci pour ton retour !

Bloc de code:
-- remplace date du fichier par la date exif creation et renomme les fichiers avec la date de création

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 extens to document file nom in un_dossier --recupere l extension du fichier
            set lextension to name extension of extens
            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 dernier "."
            set elements to text items of nom
            set nomcourt to (items 1 thru -2 of elements) as string
            set ancien_nom to nomcourt
            set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
            
            set chaque_fichier to chaque_fichier as string
            
            try
                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
                
                
            on error
                -- Ecrit un fichier erreur sur le bureau si erreur chargement date
                set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
                write "Le fichier ne contient pas de date  : " & chaque_fichier & return to lelog starting at eof
                close access lelog
                
                set datephoto to ""
            end try
            
            if length of datephoto > 20 then
                set x to (length of datephoto) - 33
                set DateOriginale to text -x thru -1 of datephoto
                set ladate to text 2 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 & " " & ancien_nom
                
                set xxx to ladate as string
                
                if xxx is " 000000000000.00" then
                    -- Ecrit un fichier erreur sur le bureau si erreur chargement date(=0000...)
                    set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
                    write "Le fichier ne contient pas de date : " & chaque_fichier & return to lelog starting at eof
                    close access lelog
                else
                    do shell script "touch -t " & ladate & " " & quoted form of POSIX path of chaque_fichier
                end if
            end if
            
            if datephoto is not "" then
                
                set aa to container of lefichier as string
                set numero to 1
                set lenewnom to newnom
                repeat
                    if exists aa & lenewnom & "." & lextension then
                        set lenewnom to newnom & "(" & numero & ")"
                        set numero to numero + 1
                    else
                        set newnom to lenewnom
                        exit repeat
                    end if
                end repeat
                set name of lefichier to newnom & "." & lextension
            else
                set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
                write "Le fichier ne contient pas de date  : " & chaque_fichier & return to lelog starting at eof
                close access lelog
            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
 
Super,

Merci beaucoup pour tes réponses.
Les deux scripts fonctionnent parfaitement.
Je serais curieux d'apprendre à éditer les scripts comme tu le fais.

Encore une fois merci beaucoup :)

Bonne soirée à toi.
 
content pour toi !
bonne fin d'année, et bonne et heureuse pour 2023 !