un applescript qui archive les photos de l'apn et qui les renomme à la volée

two

Membre émérite
6 Novembre 2005
895
296
Namur
:coucou:
Je viens de terminer d'écrire un script qui pourrait servir à d'autre et je le mets donc à disposition (merci d'ailleurs à zacromatafalgar et ceslinstinct qui m'ont apporté leur contribution dans ce fil)
Ce script récupère les photos de la carte de mon appareil photo pour les archiver dans un dossier fixe (dans des sous dossier par date d'import). Dans la foulée il renomme toute les photos pour leur donner un nom qui me permettra de distinguer mes photos de celles de mes amis.
Le script à été ecrit de manière à permettre de sauvegarder les photos même si le disque amovible sur lequel je stocke habituellement mes photos n'est pas branché (il me propose alors de choisir un dossier autre)

J'ai écrit ce fichier car je travaille en raw et donc mes photos passent par DXO avant d'ètre importées dans iphoto (j'ai aussi l'intention d'automatiser un peu l'utilisation de DXO car par manque de temps je préfère utiliser les réglages par défaut de DXO et de refaire le traitement plus en profondeur uniquement pour les photos qui en valent vraiment la peine...)

Voici donc le script à copier coller dans votre éditeur de script :
Bloc de code:
tell application "Finder"
    set mon_texte to (do shell script "date +\"%Y-%m-%d\"") as string
    -- mon_texte enregistrera donc la date sous la forme 2007-08-27 qui sevira de nom de dossier pour cette archive
    try
        set dossier_source to "NIKON D80:DCIM:100NCD80:" -- ici votre dossier d'origine par défaut 
    on error
        set dossier_source to choose folder with prompt "Choisissez l'emplacement des photos à importer."
    end try
    try
        set dossier_final to "MiniPartner:Archive photos raw:" -- ici votre dossier de destination par défaut 
    on error
        set dossier_final to choose folder with prompt "Choisissez le Dossier ou archiver vos photos."
    end try
    try
        make new folder at dossier_final with properties {name:mon_texte}
        set dossier_final2 to (dossier_final & mon_texte & ":") as alias
    on error
        set dossier_final2 to choose folder with prompt "Il existe déja un dossier d'archive pour cette date, choisisez ou créez en un nouveau "
    end try
    
    set liste_des_fichiers to list folder dossier_source
    repeat with fichier in liste_des_fichiers
        set theFile to contents of fichier
        set pathFile to (dossier_source & theFile)
        duplicate pathFile to dossier_final2
    end repeat
    (* la suite renomme les photos en conservant leur numérotation d'origine et est dérivée du script Trim Folder Names dans les script fournis par apple 
    elle renomme dans mon cas des fichiers DSC_1234 en DTWO-1234
    
    deux choses sont a modifier pour votre usage dans la ligne :  
set the new_name to "DTWO-" & (characters (5) thru -1 of the current_name) as string 
    -le 5 correspond à l'emplacement du premièr caractère à conserver de l'ancien nom
    (pour une photo DSC_1234 le 5è caractère est donc le 1 de 1234) 
    - le "DTWO-" est à remplacer à votre bon vouloir 
*)
    
    set the item_list to items of dossier_final2
    set dossier_final2 to dossier_final2 as string
    repeat with i from 1 to number of items in the item_list
        set this_item to item i of the item_list
        set this_item to (this_item) as alias
        set this_info to info for this_item
        set the current_name to the name of this_info
        set the new_name to "DTWO-" & (characters (5) thru -1 of the current_name) as string
        my set_item_name(this_item, new_name)
    end repeat
end tell

on set_item_name(this_item, new_name)
    tell application "Finder"
        --activate
        set the parent_container_path to (the container of this_item) as text
        if not (exists item (the parent_container_path & new_name)) then
            try
                set the name of this_item to new_name
            on error the error_message number the error_number
                if the error_number is -59 then
                    set the error_message to "This name contains improper characters, such as a colon (:)."
                else --the suggested name is too long
                    set the error_message to error_message -- "The name is more than 31 characters long."
                end if
                --beep
                tell me to display dialog the error_message default answer new_name buttons {"Cancel", "Skip", "OK"} default button 3
                copy the result as list to {new_name, button_pressed}
                if the button_pressed is "Skip" then return 0
                my set_item_name(this_item, new_name)
            end try
        else --the name already exists
            --beep
            tell me to display dialog "Ce nom de fichier existe déja, veuillez le renommer." default answer new_name buttons {"Cancel", "Skip", "OK"} default button 3
            copy the result as list to {new_name, button_pressed}
            if the button_pressed is "Skip" then return 0
            my set_item_name(this_item, new_name)
        end if
    end tell
end set_item_name