Sélectionner fichiers à partir d'une liste avec Automator

Ok bon j'ai trouvé, c'est quand j'ai des "=" dans mes nomenclatures que cela ne passe pas.
Je me suis pourtant basé sur le ASCII comme écrit dans ton code mais j'ai du me tromper..

penses-tu qu'il y est un moyen de prendre en compte ce symbole ? car il est présent dans les 3/4 de les fichiers.

En tout cas ta maj pour le log est parfaite, c'est exactement ce que j'avais besoin.

Encore merci. Vraiment.
 
Que veux-tu dire par "c'est quand j'ai des "=" dans mes nomenclatures" peux-tu mettre une exemple
C'est dans les noms de fichiers ?
 
En gros, des fois j'ai des fichier qui se nomment "21159_P02_PVhard_MF.pdf" et des fois "22959_P01_V4=GV=hard_F42.pdf"
J'ai fais des tests, le premier passe contrairement au deuxième, et quand je change le premier en "21159_P02_PVhard=1_MF.pdf", il n'est plus trouvé.
Donc pour moi c'est le signe = qui n'a pas l'air d'être reconnu... c'est possible ?
 
Effectivement , je viens de tester, le signe "=" n'est pas reconnu par le terminal unix comme un caractère possible d'un nom de fichier !
Pour le moment je n'ai pas de solution à ce problème à part remplacer tous les signes "=" par un autre caractère.
 
Ok ok, je vais chercher de mon côté car malheureusement dans ma config je peux difficilement envisager de remplacer ce caractère de mes fichiers..
Merci à toi.
 
Voilà une nouvelle version qui prend en compte le signe "=" et de plus j'ai modifié la recherche pour qu'elle soit insensible à la casse.
Bon test, j' attend tes résultats.

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
    set destination to dossiercible
   
    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 ""
   
    set nouveaudossier to 0 as integer
    set atraiter to 0 as integer
    repeat with une_ligne in toutes_les_lignes
        set letest to une_ligne as string
        if nouveaudossier = 1 then
            set dossiercible to dossiercible as string
            set ledossier to une_ligne as string
            tell application "Finder"
                make new folder at dossiercible with properties {name:ledossier}
            end tell
            set nouveaudossier to 0
            set destination to dossiercible & ledossier
        end if
       
        if letest = "$" then
            set nouveaudossier to 1
            set atraiter to 2
        end if
        if atraiter > 0 then
            set atraiter to atraiter - 1
        else
            try
                tell application "Finder"
                    set lefichier to do shell script "find  " & quoted form of POSIX path of dossiersource & " -iname " & une_ligne
                    set CheminImage to POSIX file lefichier as string
                   
                    duplicate CheminImage to destination
                end tell
            on error
                set lelog to open for access (path to desktop folder as text) & "lelog.txt" as text with write permission -- ouvre le fichier log et ecritles valeur séparé par une tabulation
                write "Le fichier " & une_ligne & " N'a pas été trouvé" & return to lelog starting at eof
                close access lelog -- ferme le fichier log
            end try
        end if
       
    end repeat
   
end inspecter

tell application "Finder"
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
 
Alors là.. bravo c'est exactement ce que j'avais besoin ! Tu viens de me faire gagner de précieuses heures au quotidien, je te dois beaucoup !
Merci beaucoup Zeltron.
 
Content pour toi !
 
Bonjour,
J'ai le même besoin que Guillaume16 pour le boulot. Je dois réaliser un dossier qui compile une copie de fichiers pdf.
J'ai testé le script proposé par Zeltron54 au début du post mais ça ne marche pas, j'obtiens :
"Erreur dans Finder : Le gestionnaire ne peut gérer des objets de cette classe." number -10010

Le top du top serait que la recherche puisse se faire dans un dossier et ses sous dossiers, est-ce possible ?

Merci d'avance pour votre aide
 
Bonjour,
Peux-tu préciser le contexte, (un dossier qui compile une copie !! ??)
Dis exactement ce que tu as (dossiers, fichiers, liste) et ce que tu veux obtenir quoi et où ?
On pourra regarder ce qu'il est possible de faire..
 
En fait j'ai une liste contenant les noms des fichiers que je souhaites copier (fichier Excel enregistré au format texte, séparateur, tabulation)
Les fichiers que je souhaite copier sont des pdf, il sont répartis dans différents sous dossiers.

Je voudrais faire une copie, dans un nouveau dossier, des fichiers spécifiés dans la liste.

(Quand je parle de compiler, je veux dire rassembler)
J'espère avoir été plus claire.
Merci pour ton aide
 
Dans ta liste, as-tu le nom des répertoires contenant les fichiers à copier ?
Peux-tu nous lettre un exemple de fichier texte contenant la liste à traiter ?

Merci
 
Non, je n'ai pas le nom des répertoires mais je peux facilement les intégrer.
Je n'arrive pas à vous transmettre le fichier liste au au format texte, séparateur, tabulation (le site m'en empêche), je met une copie d'écran.
Capture d’écran 2018-09-17 à 15.55.16.webp

Si besoin, je peux facilement adapter ce fichier, je part d'un export Excel de mon ERP.
 

Fichiers joints

  • Capture d’écran 2018-09-17 à 11.49.02.webp
    Capture d’écran 2018-09-17 à 11.49.02.webp
    148,6 KB · Affichages: 248
Ok, donc la tabulation comme séparateur mais il n’y a qu’une seule colonne. Cette colonne contient le nom des fichier sans le nom du répertoire.

Il faudra donc retrouver le répertoire contenant le fichier et le copier/déplacer dans un autre donné en paramètre ou forcé.
 
Je te joins un script qui fera le job.
Au lancement il te demande de choisir
-le dossier source qui contient tous les sous dossiers et les fichiers à rechercher.
-le dossier destination dans lequel seront dupliqués les fichiers .pdf trouvés.
-la liste texte des fichiers à dupliquer.

Il déplace tous les fichiers trouvés et crée sur le bureau un fichier log des fichiers de la liste non trouvés

Dis moi si ça te conviens.

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
    set destination to dossiercible
   
    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
       
        try
            tell application "Finder"
                set lefichier to do shell script "find  " & quoted form of POSIX path of dossiersource & " -iname " & une_ligne & ".pdf"
                set CheminImage to POSIX file lefichier as string
               
                duplicate CheminImage to destination
            end tell
        on error
            set lelog to open for access (path to desktop folder as text) & "lelog.txt" as text with write permission -- ouvre le fichier log et ecritles valeur séparé par une tabulation
            write "Le fichier " & une_ligne & " N'a pas été trouvé" & return to lelog starting at eof
            close access lelog -- ferme le fichier log
        end try
       
    end repeat
   
end inspecter

tell application "Finder"
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
 
Merci pour vos réponses,
Zeltron54 je viens de tester ton script, effectivement il fait le job mais bizarrement seulement avec premier fichier de la liste, le log indique que les autres n'ont pas été trouvés

J'ai testé de chez moi et je n'ai pas le même OS qu'au bureau, je ne sais pas si ça change quelque chose, je réessaierais demain matin sur mon mac du boulot.
 
Non l'OS ne change rien, par contre la liste doit être issue d'un enregistrement excel au format texte (séparateur : tabulation) et pas de ligne vide.
Un autre solution pourra éventuellement être mise en oeuvre avec un fichier texte ordinaire ou les titres seraient séparés par des virgules, il suffirait alors de faire une petite modification au script.
 
Alors c'est peut être ma liste le problème.
Comme je n'ai pas Excel à la maison, je suis partie d'une liste faite dans Google Sheets enregistrée au format .tsv
Je reteste demain matin dans de bonnes conditions et je vous tiens au courant.

En tout cas merci pour votre aide
 
Ok, j'attend le verdict....
 
Après réflexion, j'ai modifié le script pour qu'il prenne en compte les fichiers texte, ligne par ligne, que celui-ci soit issu d'excel ou directement d'un fichier texte. celà devrait facilité son utilisation.
j'attends le résultat de tes essais .

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
    set destination to dossiercible
   
    open for access liste1
    read liste1
    set tout_le_fichier to the result
    close access liste1
    set nb to count paragraph of tout_le_fichier
   
    repeat with i from 1 to nb
        try
            tell application "Finder"
                set une_ligne to paragraph i of tout_le_fichier
                set lefichier to do shell script "find  " & quoted form of POSIX path of dossiersource & " -iname " & une_ligne & ".pdf"
                set CheminImage to POSIX file lefichier as string
               
                duplicate CheminImage to destination
            end tell
        on error
            set lelog to open for access (path to desktop folder as text) & "lelog.txt" as text with write permission -- ouvre le fichier log et ecritles valeur séparé par une tabulation
            write "Le fichier " & une_ligne & " N'a pas été trouvé" & return to lelog starting at eof
            close access lelog -- ferme le fichier log
        end try
    end repeat
end inspecter

tell application "Finder"
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
 
  • J’aime
Réactions: choux