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

tazdunord

Membre confirmé
18 Juin 2014
61
8
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 !
 

zeltron54

Membre expert
Club MacG
29 Mars 2008
2 495
397
Lorraine
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…
 

tazdunord

Membre confirmé
18 Juin 2014
61
8
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:

zeltron54

Membre expert
Club MacG
29 Mars 2008
2 495
397
Lorraine
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.
 

zeltron54

Membre expert
Club MacG
29 Mars 2008
2 495
397
Lorraine
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
 

zeltron54

Membre expert
Club MacG
29 Mars 2008
2 495
397
Lorraine
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
 

zeltron54

Membre expert
Club MacG
29 Mars 2008
2 495
397
Lorraine
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
 

tazdunord

Membre confirmé
18 Juin 2014
61
8
: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 !)
 

zeltron54

Membre expert
Club MacG
29 Mars 2008
2 495
397
Lorraine
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:
 

tazdunord

Membre confirmé
18 Juin 2014
61
8
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
 

zeltron54

Membre expert
Club MacG
29 Mars 2008
2 495
397
Lorraine
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

alainduchnord

Membre enregistré
22 Avril 2022
2
0
32
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
 

zeltron54

Membre expert
Club MacG
29 Mars 2008
2 495
397
Lorraine
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 ?)
 

alainduchnord

Membre enregistré
22 Avril 2022
2
0
32
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
 

zeltron54

Membre expert
Club MacG
29 Mars 2008
2 495
397
Lorraine
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: