Modifier la date (création-modification-ouverture) dans des dossiers

tazdunord

Membre confirmé
18 Juin 2014
63
10
Bonjour à tous,

Je cherche une application ou un script qui permettrait d'appliquer à tout le contenu d'un dossier (y compris les sous-dossiers) un changement de la date de création, de modification et de la dernière ouverture.

J'ai bien essayé la commande "touch" dans le terminal, mais elle ne modifie pas le contenu d'un dossier et la date de dernière ouverture.

N'ayant aucune compétence en développement, peut-être pourrez-vous m'aider ?
Merci d'avance !
 
Bonjour,

Te veux changer les dates de quel type de fichiers ? Photos ou autre…
Tu veux les remplacer par quelles date (pour les photos la date de prise de vue) ou une autre date que tu définies ?
Tu parles bien de la date de création du fichier Pas la date de la prise de vue d’une photo ?

avec tous ces éléments on peux envisager de créer un AppleScript…
 
Bonjour,

Te veux changer les dates de quel type de fichiers ? Photos ou autre…
Tu veux les remplacer par quelles date (pour les photos la date de prise de vue) ou une autre date que tu définies ?
Tu parles bien de la date de création du fichier Pas la date de la prise de vue d’une photo ?

avec tous ces éléments on peux envisager de créer un AppleScript…
Bonjour,

Je voudrais pouvoir spécifier une date et une heure de création pour :
- des fichiers mp3 (enregistrements audios fait dans Audacity)
-> avec la commande touch, j'y arrive en glissant la sélection de fichiers dans le terminal
- des jpg/png créés (avec Affinity Designer), pas des photos prises avec un appareil.
-> avec la commande touch, ça ne modifie que la date de modification.

Capture d’écran 2022-01-07 à 13.18.13.png
Par exemple ici, je voudrais pouvoir changer la date de création d'un ensemble de ficher png (avec "touch -t YYMMDDHHMM" ça ne change que "modifié le").

Idéalement, j'aimerai pouvoir sélectionner un dossier, spécifier une date unique et que tous les fichiers contenus dans ce dossier aient cette nouvelle date de création.

Merci.
 
Dernière édition:
Je viens de faire quelques essais !

Pour les fichiers image (png, jpg, etc...) pas de problème avec un script + le logiciel exiftool.
Pour les fichiers mp3 la date de modification pas de problème, pour la date de création elle semble être verrouillée et non modifiable.
 
Je t'ai fait un applescript qui devrait faire le job.

Il faut d'abord installer exiftool , à télécharger là : https://exiftool.org/
prendre la version mac : ("MacOS Package: ExifTool-12.38.dmg (3.1 MB)"
Après avec ouvert le dmg, un double clic sur le package d'installation (cela ajoute la commande exiftool dispo dans le terminal).

Le script ci-dessous te demande de sélectionner le dossier contenant les fichiers à traiter, puis il te demande d'entrer la date au format: AAAA:MM:JJ:HH:MN:SS
il traite tous les fichiers des dossiers et sous dossiers.
Il traite les fichier Audio .mp3 d'un coté et les autres qui sont sensés être des fichiers images (png, jpg, etc...)
Quand il a terminé il te met un message.

Dis moi c'est bon ! (fait d'abord un essai sur une copie ! avec quelques fichiers pour voir si cela te convient.)

Bloc de code:
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
        display dialog "Entrer la date de creation AAAA:MM:JJ:HH:MN:SS" default answer ""
        set ladate to text returned of result
        set yy to text 3 thru 4 of ladate
        set mm to text 6 thru 7 of ladate
        set jj to text 9 thru 10 of ladate
        set hh to text 12 thru 13 of ladate
        set mn to text 15 thru 16 of ladate
       
        set ladatemp3 to yy & mm & jj & hh & mn
        set ladatecmp3 to mm & "/" & jj & "/" & yy & " " & hh & ":" & mn
       
        repeat with chaque_fichier in les_fichiers
           
            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 nom to chaque_fichier as string
            -- traitement d'un fichier
            if lextension is "mp3" then
                set lacommande11 to "touch -t " & ladatemp3 & " " & quoted form of POSIX path of nom
                set lacommande12 to "setfile -d  " & "'" & ladatecmp3 & "'" & " " & quoted form of POSIX path of nom
                do shell script lacommande11
                do shell script lacommande12
            else
                set lacommande1 to "/usr/local/bin/exiftool -filemodifydate=" & ladate & " " & quoted form of POSIX path of nom
                set lacommande2 to "/usr/local/bin/exiftool -createdate=" & ladate & " " & quoted form of POSIX path of nom
                do shell script lacommande2
                do shell script lacommande1
               
                set lacommande3 to "rm " & quoted form of POSIX path of nom & "_original"
                do shell script lacommande3
            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 te mets une nouvelle version plus légère qui ne nécessite pas exiftool !

Bon tests

J'attends ton retour.

Bloc de code:
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
        display dialog "Entrer la date de creation AAAA:MM:JJ:HH:MN:SS" default answer ""
        set ladate to text returned of result
        set yy to text 3 thru 4 of ladate
        set mm to text 6 thru 7 of ladate
        set jj to text 9 thru 10 of ladate
        set hh to text 12 thru 13 of ladate
        set mn to text 15 thru 16 of ladate
        
        set ladate to mm & "/" & jj & "/" & yy & " " & hh & ":" & mn
        
        repeat with chaque_fichier in les_fichiers
            
            set lefichier to chaque_fichier
            set nom to chaque_fichier as string
            
            set lacommande1 to "setfile -m  " & "'" & ladate & "'" & " " & quoted form of POSIX path of nom
            set lacommande2 to "setfile -d  " & "'" & ladate & "'" & " " & quoted form of POSIX path of nom
            do shell script lacommande1
            do shell script lacommande2
            
        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
 
Une version qui te permets de mettre des dates avant 2000 !

Bloc de code:
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
        display dialog "Entrer la date de creation AAAA:MM:JJ:HH:MN:SS" default answer ""
        set ladate to text returned of result
        set yyyy to text 1 thru 4 of ladate
        set mm to text 6 thru 7 of ladate
        set jj to text 9 thru 10 of ladate
        set hh to text 12 thru 13 of ladate
        set mn to text 15 thru 16 of ladate
        
        set ladate to mm & "/" & jj & "/" & yyyy & " " & hh & ":" & mn
        
        repeat with chaque_fichier in les_fichiers
            
            set lefichier to chaque_fichier
            set nom to chaque_fichier as string
            
            set lacommande1 to "setfile -m  " & "'" & ladate & "'" & " " & quoted form of POSIX path of nom
            set lacommande2 to "setfile -d  " & "'" & ladate & "'" & " " & quoted form of POSIX path of nom
            do shell script lacommande1
            do shell script lacommande2
            
        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
 
:up: GÉNIAL !!!
J'ai eu un peu de mal au début mais c'était dû une mauvaise utilisation d'Automator puis l'absence d'Xcode.

Mais effectivement, ça fonctionne super bien !

@zeltron54 un immense merci !!!
(ça donne envie d'apprendre à faire des scripts !)
 
J'ai eu un peu de mal au début mais c'était dû une mauvaise utilisation d'Automator puis l'absence d'Xcode.
Je n'ai pas compris ! automator et Xcode n'ont rien à voir la dedans !
Seul "Editeur de script" est nécessaire ... :)

Enfin si tout fonctionne ! content pour toi !:up:
 
Mince, je ne connaissais pas.
J'ai ouvert Automator, j'ai choisis "Nouvelle application" puis j'ai glissé "Script" et j'ai collé ton script.
(Et j'ai eu des erreurs, je devais télécharger Xcode).

Effectivement il y a "Editeur de script", je n'avais jamais vu :p
 
Alors,
Ouvrir l’application “Editeur de script” qui est dans Application—>Utilitaires
Choisir le bouton en bas à gauche “Nouveau document”, dans la fenêtre qui s’ouvre faire un copier-coller du script.
Cliquer sur le bouton en haut à gauche “Exécuter”

Le script te demande de choisir le dossier à traiter...

Attendre que le script te prévienne qu’il à terminé.
 
  • J’aime
Réactions: tazdunord
Une version qui te permets de mettre des dates avant 2000 !

Bloc de code:
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
        display dialog "Entrer la date de creation AAAA:MM:JJ:HH:MN:SS" default answer ""
        set ladate to text returned of result
        set yyyy to text 1 thru 4 of ladate
        set mm to text 6 thru 7 of ladate
        set jj to text 9 thru 10 of ladate
        set hh to text 12 thru 13 of ladate
        set mn to text 15 thru 16 of ladate
       
        set ladate to mm & "/" & jj & "/" & yyyy & " " & hh & ":" & mn
       
        repeat with chaque_fichier in les_fichiers
           
            set lefichier to chaque_fichier
            set nom to chaque_fichier as string
           
            set lacommande1 to "setfile -m  " & "'" & ladate & "'" & " " & quoted form of POSIX path of nom
            set lacommande2 to "setfile -d  " & "'" & ladate & "'" & " " & quoted form of POSIX path of nom
            do shell script lacommande1
            do shell script lacommande2
           
        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
Yo!
Ca marche au top, sauf pour la date de dernière ouverture.
T'as une solution?

merci
 
Bonjour,
Le script s'occupe de la date de création et de modification du fichier, pas de la dernière ouverture.

Que veux-tu faire exactement et dans quel but ? et pour quel type de fichier (photos ou ?)
 
Bonjour,

je voudrai idealement faire deux choses, la premiere est que je ne peux pas changer la date de modifications de certains fichiers comme par exemple /Library, ca ne marche pas avec touch -mt "<date>", ni la date de modification des app (Notes) etc..,
deuxeiement je n'arrive pas a changer la "date de derniere ouverture" que tu vois dans le finder.

Merci beaucoup pour ta réponse.
Alain
 
Bonjour,

On parlait de fichiers, toi tu parles de dossiers et d'applications ... je ne vois pas l'utilité d'une telle modification ! mais bon.

Pour changer la date de modification utilise plutôt "setfile" au lieu de touch
le format date pour setfile est MM/JJ/AAAA HH:MM
exemple pour date de modification -->23/04/2021 à 14h05
setfile -m '04/23/2021 14:05' Mon_fichier
pour la date de création
setfile -d '04/23/2021 14:05' Mon_fichier

Pour la date de dernière ouverture elle est en lecture seule donc pas modifiable par programmation.
Tu peux toujours modifier la date système de ton ordi, puis ouvrir ton fichier, le fermer et remettre la date de l'ordi.
 
Dernière édition:
Une version qui te permets de mettre des dates avant 2000 !

Bloc de code:
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
        display dialog "Entrer la date de creation AAAA:MM:JJ:HH:MN:SS" default answer ""
        set ladate to text returned of result
        set yyyy to text 1 thru 4 of ladate
        set mm to text 6 thru 7 of ladate
        set jj to text 9 thru 10 of ladate
        set hh to text 12 thru 13 of ladate
        set mn to text 15 thru 16 of ladate
       
        set ladate to mm & "/" & jj & "/" & yyyy & " " & hh & ":" & mn
       
        repeat with chaque_fichier in les_fichiers
           
            set lefichier to chaque_fichier
            set nom to chaque_fichier as string
           
            set lacommande1 to "setfile -m  " & "'" & ladate & "'" & " " & quoted form of POSIX path of nom
            set lacommande2 to "setfile -d  " & "'" & ladate & "'" & " " & quoted form of POSIX path of nom
            do shell script lacommande1
            do shell script lacommande2
           
        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
 
@GODARD
Et alors, ta question est ?
Donc mon inscription a été faite et je reviens !
Est-il possible de changer le format d'une date (en série sur les fichiers contenus dans un dossier) de JJ/MM/AAA en AAAA/MM/JJ ou AA/MM/JJ à l'aide d'un bloc de code (il s'agit de fichier photo : le premier format ne permet pas de les avoir dans l'ordre chronologique - et j'aimerais éviter de charger ExifTool-12.38.dmg)
Merci pour vos conseils

:up: GÉNIAL !!!
J'ai eu un peu de mal au début mais c'était dû une mauvaise utilisation d'Automator puis l'absence d'Xcode.

Mais effectivement, ça fonctionne super bien !

@zeltron54 un immense merci !!!
(ça donne envie d'apprendre à faire des scripts !)
bonsoir,
comment utilisez-vous le script avec Automator ? Ça m'intéresse beaucoup. Merci

Une version qui te permets de mettre des dates avant 2000 !

Bloc de code:
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
        display dialog "Entrer la date de creation AAAA:MM:JJ:HH:MN:SS" default answer ""
        set ladate to text returned of result
        set yyyy to text 1 thru 4 of ladate
        set mm to text 6 thru 7 of ladate
        set jj to text 9 thru 10 of ladate
        set hh to text 12 thru 13 of ladate
        set mn to text 15 thru 16 of ladate
      
        set ladate to mm & "/" & jj & "/" & yyyy & " " & hh & ":" & mn
      
        repeat with chaque_fichier in les_fichiers
          
            set lefichier to chaque_fichier
            set nom to chaque_fichier as string
          
            set lacommande1 to "setfile -m  " & "'" & ladate & "'" & " " & quoted form of POSIX path of nom
            set lacommande2 to "setfile -d  " & "'" & ladate & "'" & " " & quoted form of POSIX path of nom
            do shell script lacommande1
            do shell script lacommande2
          
        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
Bonsoir,
si je souhaite avoir la date écrite comme nom de fichier au format AAAA/MM/JJ est-ce qu'il faut écrire : set ladate to yyyy & "/" & mm & "/" & jj & " " & hh & ":" & mn
est-ce qu'il faut charger ("MacOS Package: ExifTool-12.38.dmg (3.1 MB)" pour que ça fonctionne ? (je traite des fichiers photo)

@GODARD
Et alors, ta question est ?
Bonsoir,
j'ai posé la question sur d'autres post : je voudrais une méthode pour transformer un nom de fichier qui est une date au format JJ/MM/AAAA en nom de fichier au format AAAA/MM/JJ de sorte de pouvoir les classer par ordre chronologique.
Merci
 
Bonsoir,
Ce script ne touche pas au nom du fichier ! Il traite les données exif qui sont dans les informations:
  • La date de création du fichier (pas la date de création de la photo)
  • La date de modification du fichier

Expliques exactement ton besoin:

Tu as des photos avec la date dans le nom de la photo ?
Si oui, mets des exemples de nom , afin de voir comment on peut récupérer ces infos.

Et tu veux obtenir quoi exactement ?
Mets des exemple du résultat souhaité ...
 
Bonsoir,
J'ai exporté des photos depuis Lightroom en demandant que la date soit mise comme nom chaque photo.
Renommer en : Date - Nom du fichier => 17072001-IMG_0003.jpg (il n'y a pas d'autre option pour avoir la date seule, ni dans le format souhaité)
La date est au format jour,Mois,Année et le tri sur le nom du fichier mélange la chronologie.
Il faudrait un format Année,Mois,Jour et éliminer le reste du nom => 20010717.jpg (ce que j'ai fait manuellement ! Fastidieux)
Tout ça pour ne pas être obligé de remettre les photos dans un logiciel de photos, mais les avoir dans l'ordre au niveau du dossier et pouvoir les regarder par exemple avec aperçu chronologiquement.
Merci de me dire si c'est possible avec un script