Transfert de photos selon une liste avec applescript

T-45

Membre junior
31 Mai 2018
25
1
24
Bonjour,
Etant novice dans le domaine, je suis à la recherche d'un script pour gagner un peu de temps.
Je suis photographe de studio professionnel. En fin de shooting, mes clients reçoivent leurs photos en ligne et m'envoient la liste des photos a retoucher.
Je reçois donc une très grande liste de numéro de photo qu'il me faut retrouver à la main, une par une.

J'aimerais donc trouver un script capable, selon une liste de numéros de photos (.txt .tsv .csv) de transférer les bonnes photos d'un dossier A vers un dossier B. (IMG_0000)


J'ai trouvé ce script sur ce forum :

tell application "Finder"

set cheminsource to choose folder with prompt "Sélectionnez le dossier contenant les fichiers à copier"

set chemincible to choose folder with prompt "Sélectionnez le dossier cible"

set laliste to choose file with prompt "Sélectionnez le fichier liste"

my inspecter(cheminsource, chemincible, laliste)

end tell


on inspecter(source, cible, liste1)



set dossiersource to source as string

set dossiercible to cible as string





open for access liste1

read liste1

set tout_le_fichier to the result

close access liste1

set AppleScript's text item delimiters to (ASCII character 13)

set toutes_les_lignes to (every text item of tout_le_fichier) as list

set AppleScript's text item delimiters to ""

set tout_le_fichier to ""





repeat with une_ligne in toutes_les_lignes

set CheminImage to dossiersource & une_ligne

tell application "Finder"



duplicate CheminImage to dossiercible



end tell

end repeat

end inspecter

tell application "Finder"

(display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})

end tell



Il ne fonctionne malheureusement pas dans mon cas (je ne sais pas trop pourquoi) mais je récupère une erreur (
"Erreur dans Finder : Le gestionnaire ne peut gérer des objets de cette classe." number -10010) avec la partie "duplicate CheminImage to dossiercible" en surbrillance.

Je suis sur Mac Mini OS Sierra

Auriez-vous une idée de comment arranger cela ?

Je vous remercie d'avance pour votre aide !
 

zeltron54

Membre d’élite
29 Mars 2008
1 752
262
Lorraine
Bonjour,
L'erreur provient d'un nom de fichier pas reconnu.
Comment se présente la liste et dans quel format? (mettre un exemple svp)
Comment est le nom du fichier dans le dossier source (nom.extension)
 
Dernière édition:

T-45

Membre junior
31 Mai 2018
25
1
24
Merci pour votre réponse !

La liste se présente comme telle:
IMG_1906
IMG_1901
IMG_1898
IMG_1891

Le nom des fichiers dans le dossier source:
IMG_1906.CR2 (fichier RAW)
 

zeltron54

Membre d’élite
29 Mars 2008
1 752
262
Lorraine
Alors 2 possibilités
1- la liste doit avoir l 'extension du fichier (IMG_1906.CR2)
2- Si tous les fichiers sont en .CR2, ajouter l'extension dans le script: ce qui donne
Bloc de code:
tell application "Finder"
   
    set cheminsource to choose folder with prompt "Sélectionnez le dossier contenant les fichiers à copier"
   
    set chemincible to choose folder with prompt "Sélectionnez le dossier cible"
   
    set laliste to choose file with prompt "Sélectionnez le fichier liste"
   
    my inspecter(cheminsource, chemincible, laliste)
   
end tell


on inspecter(source, cible, liste1)
   
   
   
    set dossiersource to source as string
   
    set dossiercible to cible as string
   
   
   
   
   
    open for access liste1
   
    read liste1
   
    set tout_le_fichier to the result
   
    close access liste1
   
    set AppleScript's text item delimiters to (ASCII character 13)
   
    set toutes_les_lignes to (every text item of tout_le_fichier) as list
   
    set AppleScript's text item delimiters to ""
   
    set tout_le_fichier to ""
   
   
   
   
   
    repeat with une_ligne in toutes_les_lignes
    set CheminImage to dossiersource & une_ligne & ".cr2"
       
        set CheminImage to dossiersource & une_ligne
       
        tell application "Finder"
           
           
           
            duplicate CheminImage to dossiercible
           
           
           
        end tell
       
    end repeat
   
end inspecter

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

T-45

Membre junior
31 Mai 2018
25
1
24
Super merci beaucoup ça fonctionne !!

Malheureusement je ne récupère que la liste sans extensions, il ne me reste qu'à trouver le moyen d'ajouter .CR2 sur chaque ligne. Soit dans le fichier .tsv soit dans mon tableur.
Mais ça ne devrait pas être bien compliqué !
Merci beaucoup !
 

r e m y

Cas clinique
Club MacG
4 Novembre 2000
41 478
4 245
58
St Germain en Laye - FRANCE
Le script modifié par zeltron ajoute lui-même l'extension.cr2
( set CheminImage to dossiersource & une_ligne & ".cr2" )

Inutile de modifier quoi que ce soit dans la liste.
 

T-45

Membre junior
31 Mai 2018
25
1
24
Ça ne fonctionne pas si je n'ajoute pas l'extension et ça ne marche finalement qu'une fois sur 10 avec l'extension, j'avoue ne pas trop savoir quoi faire. J'ai testé pas mal de chose, ça n'a marché que lorsqu'il n'y avait qu'un seul fichier dans la liste.
 

zeltron54

Membre d’élite
29 Mars 2008
1 752
262
Lorraine
Coucou T-45
J'avais du m'absenter...
Effectivement je t'ai mis le script en vitesse , en ajoutant la nouvelle ligne mais en oubliant d'effacer l'ancienne.

Alors si ton fichier texte n'a pas les extensions et que tous tes fichiers sont en .cr2
Voilà le bon script
Bloc de code:
tell application "Finder"
  
    set cheminsource to choose folder with prompt "Sélectionnez le dossier contenant les fichiers à copier"
    set chemincible to choose folder with prompt "Sélectionnez le dossier cible"
    set laliste to choose file with prompt "Sélectionnez le fichier liste"
    my inspecter(cheminsource, chemincible, laliste)
end tell

on inspecter(source, cible, liste1)
    set dossiersource to source as string
    set dossiercible to cible as string
    open for access liste1
    read liste1
    set tout_le_fichier to the result
    close access liste1
    set AppleScript's text item delimiters to (ASCII character 13)
    set toutes_les_lignes to (every text item of tout_le_fichier) as list
    set AppleScript's text item delimiters to ""
    set tout_le_fichier to ""

    repeat with une_ligne in toutes_les_lignes
        set CheminImage to dossiersource & une_ligne & ".cr2"      
        tell application "Finder"
            duplicate CheminImage to dossiercible
        end tell
    end repeat
end inspecter

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

zeltron54

Membre d’élite
29 Mars 2008
1 752
262
Lorraine
Je précise quand même que le script fait une copie du fichier original dans le dossier destination, sans toucher au dossier original
Si tu veux le déplacer, tu le dis je te modifierai le script.
 

T-45

Membre junior
31 Mai 2018
25
1
24
Malheureusement ça ne fonctionne toujours pas :eek:. Je vois dans le script qu'il y est marqué .jpg, c'est normal ?
 

zeltron54

Membre d’élite
29 Mars 2008
1 752
262
Lorraine
Non ,
J'avais corriger en cr2
revérifie .
 

T-45

Membre junior
31 Mai 2018
25
1
24
Pour juste le déplacer c'est très bien !
Par contre même après correction .cr2 ça ne fonctionne pas, j'ai toujours un message d'erreur
Erreur dans Finder : Le gestionnaire ne peut gérer des objets de cette classe." number -10010

Je ne sais pas si c'est moi, ou si c'est le format fichier .tsv ou si c'est la disposition :

exemple:

IMG_1906
IMG_1901
IMG_1898
IMG_1891
IMG_1883
IMG_1871
IMG_1875
IMG_1869
IMG_1866
IMG_1847
IMG_1845
IMG_1843
 

zeltron54

Membre d’élite
29 Mars 2008
1 752
262
Lorraine
Le format du fichier liste doit être en texte (.txt)
 

r e m y

Cas clinique
Club MacG
4 Novembre 2000
41 478
4 245
58
St Germain en Laye - FRANCE
Et avec un retour chariot (Code ascii 13) pour séparer les noms de fichiers.
 

T-45

Membre junior
31 Mai 2018
25
1
24
Ça doit surement être ça le problème, mais comment fait-on ? Pour l'instant je faisais soit une simple avec l'outil texte soit une liste avec le tableur open office
 

zeltron54

Membre d’élite
29 Mars 2008
1 752
262
Lorraine
Je n'ai pas open office (je suis sur excel), mais ça doit être pareil.
tes noms de fichiers dans la colonne A. tu enregistres ou exportes au format texte séparteur tabulation
je pense que c'est l'appellation approchante.... !
 

T-45

Membre junior
31 Mai 2018
25
1
24
Après enregistrement au format texte séparateur tabulation grâce à googlesheet j'ai toujours le même message d'erreur
 

zeltron54

Membre d’élite
29 Mars 2008
1 752
262
Lorraine
Au départ, la liste des choix des clients tu la récupères où, comment, sous quel format et avec quoi ?
Car d'ici j'ai du mal à comprendre ce qui ne va pas.
 

T-45

Membre junior
31 Mai 2018
25
1
24
La liste client est récupérée depuis un prestataire galerie en ligne qui me fournis un lien qui copie automatiquement la liste des numéros de photos
Exemple juste après copie:

IMG_1906,IMG_1901,IMG_1898,IMG_1891,IMG_1883,IMG_1871,IMG_1875,IMG_1869

Je m'arrange derrière grâce à l'option transposer pour les aligner dans des cellules distinctes et en ligne verticale comme ci-dessous :

IMG_1906
IMG_1901
IMG_1898
IMG_1891
IMG_1883
IMG_1871
IMG_1875
IMG_1869
 

zeltron54

Membre d’élite
29 Mars 2008
1 752
262
Lorraine
Je pense à autre chose, ton dossier destination est bien vide ? pas que tu essais de copier 2 fois le même fichier. (le script ne fait pas de test si le fichier existe déjà).