Ce forum est en partie financé par l’affichage de publicités. Merci de désactiver votre bloqueur de publicités pour nous permettre de continuer à fournir ce service.

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

Discussion dans 'Développement Mac' créé par Guillaume16, 23 Juin 2014.

  1. overdozz

    overdozz Nouveau membre

    Inscrit:
    2 Juillet 2018
    Messages:
    10
    J'aime reçus:
    0
    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.
     
  2. zeltron54

    zeltron54 Membre d’élite

    Inscrit:
    29 Mars 2008
    Messages:
    1 083
    J'aime reçus:
    152
    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 ?
     
  3. overdozz

    overdozz Nouveau membre

    Inscrit:
    2 Juillet 2018
    Messages:
    10
    J'aime reçus:
    0
    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 ?
     
  4. zeltron54

    zeltron54 Membre d’élite

    Inscrit:
    29 Mars 2008
    Messages:
    1 083
    J'aime reçus:
    152
    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.
     
  5. overdozz

    overdozz Nouveau membre

    Inscrit:
    2 Juillet 2018
    Messages:
    10
    J'aime reçus:
    0
    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.
     
  6. zeltron54

    zeltron54 Membre d’élite

    Inscrit:
    29 Mars 2008
    Messages:
    1 083
    J'aime reçus:
    152
    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.

    Code (Text):
    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
     
  7. overdozz

    overdozz Nouveau membre

    Inscrit:
    2 Juillet 2018
    Messages:
    10
    J'aime reçus:
    0
    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.
     
  8. zeltron54

    zeltron54 Membre d’élite

    Inscrit:
    29 Mars 2008
    Messages:
    1 083
    J'aime reçus:
    152
    Content pour toi !
     
  9. choux

    choux Membre junior

    Inscrit:
    5 Novembre 2007
    Messages:
    28
    J'aime reçus:
    0
    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
     
  10. zeltron54

    zeltron54 Membre d’élite

    Inscrit:
    29 Mars 2008
    Messages:
    1 083
    J'aime reçus:
    152
    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..
     
  11. choux

    choux Membre junior

    Inscrit:
    5 Novembre 2007
    Messages:
    28
    J'aime reçus:
    0
    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
     
  12. ecatomb

    ecatomb Membre d’élite
    Club MacG

    Inscrit:
    21 Septembre 2016
    Messages:
    1 451
    J'aime reçus:
    236
    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
     
  13. choux

    choux Membre junior

    Inscrit:
    5 Novembre 2007
    Messages:
    28
    J'aime reçus:
    0
    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.png

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

    Pièces jointes:

  14. ecatomb

    ecatomb Membre d’élite
    Club MacG

    Inscrit:
    21 Septembre 2016
    Messages:
    1 451
    J'aime reçus:
    236
    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é.
     
  15. zeltron54

    zeltron54 Membre d’élite

    Inscrit:
    29 Mars 2008
    Messages:
    1 083
    J'aime reçus:
    152
    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.

    Code (Text):
    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
     
  16. choux

    choux Membre junior

    Inscrit:
    5 Novembre 2007
    Messages:
    28
    J'aime reçus:
    0
    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.
     
  17. zeltron54

    zeltron54 Membre d’élite

    Inscrit:
    29 Mars 2008
    Messages:
    1 083
    J'aime reçus:
    152
    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.
     
  18. choux

    choux Membre junior

    Inscrit:
    5 Novembre 2007
    Messages:
    28
    J'aime reçus:
    0
    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
     
  19. zeltron54

    zeltron54 Membre d’élite

    Inscrit:
    29 Mars 2008
    Messages:
    1 083
    J'aime reçus:
    152
    Ok, j'attend le verdict....
     
  20. zeltron54

    zeltron54 Membre d’élite

    Inscrit:
    29 Mars 2008
    Messages:
    1 083
    J'aime reçus:
    152
    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 .

    Code (Text):
    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
     
    choux aime ça.
Chargement...

iOccasion - Achetez un produit Apple d'occasion

refurb Apple