AppleScript/Automator combiner plusieurs PDF dont le nom...

zeltron54

Membre d’élite
29 Mars 2008
1 755
262
Lorraine
Donc il suffit de récupérer le numéro de chapitre (08 dans l'exemple) qui est présent et le même sur tous les fichiers fusionnés et d'ajouter " - ACTIVITÉS - ELEVES - Chapitre Complet.pdf" qui sera une valeur constante à toutes les fusions.
C'est bien ça ?
je me met au boulot...
 

MilesTEG

Membre confirmé
29 Octobre 2007
263
14
38
Oui c'est ça :D
Merci bien en tout cas ;)
 

zeltron54

Membre d’élite
29 Mars 2008
1 755
262
Lorraine
Bon voilà:
Bon test et tien moi au courant.
Bloc de code:
tell application "Finder"
    set chemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers à traiter"
    make new folder at ((path to home folder) as string) with properties {name:"compilation"}
    make new folder at ((path to home folder) & "compilation" as string) with properties {name:"la_selection"}
    set chemin_compilation to ((path to home folder) & "compilation:") as string
    set chemin_selection to ((path to home folder) & "compilation:la_selection:") as string
    set chemin_pageblanche to ((path to home folder) & "pageblanche.pdf") as string
   
   
    set les_fichiers to files of chemin
    repeat with chaque_fichier in les_fichiers
        set nom to name of chaque_fichier as string
       
        if nom contains "eleve" and nom contains ".pdf" then
            duplicate chaque_fichier to chemin_selection
        end if
    end repeat
   
    set la_selection to chemin_selection as alias
    set les_fichiers to files of la_selection
    repeat with le_fichier in les_fichiers
        set nom to name of le_fichier
       
        if not (exists chemin_compilation & "la_compilation.pdf") then
            duplicate le_fichier to chemin_compilation
            set anciennom to chemin_compilation & nom as alias
            set name of anciennom to "la_compilation.pdf"
           
        else
           
            duplicate le_fichier to chemin_compilation
            set anciennom to chemin_compilation & nom as alias
            set name of anciennom to "suite.pdf"
           
            set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
            set fich to quoted form of POSIX path of fich
           
            delay 3
            set NP to do shell script "mdls -name kMDItemNumberOfPages " & fich
            set NP to word 3 of NP
            if NP mod 2 is not 0 then
               
                set leblanc to chemin_pageblanche as string
                set leblanc to quoted form of POSIX path of leblanc
                set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
                set nouveau1 to quoted form of POSIX path of nouveau
                set lenew to fich & " " & leblanc
               
                do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
                do shell script "rm " & fich
                set nouveau to nouveau as alias
                set name of nouveau to "la_compilation.pdf"
            end if
           
            set le2 to ((path to home folder) & "compilation:suite.pdf") as string
            set le2 to quoted form of POSIX path of le2
            set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
            set nouveau1 to quoted form of POSIX path of nouveau
            set lenew to fich & " " & le2
           
            do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
            do shell script "rm " & fich
            do shell script "rm " & le2
            set nouveau to nouveau as alias
            set name of nouveau to "la_compilation.pdf"
           
        end if
       
    end repeat
    set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
    set Chapitre to word 1 of nom
    duplicate fich to chemin
    set chemin to chemin as string
    set chemin to chemin & "la_compilation.pdf" as alias
    set name of chemin to (Chapitre & " - ACTIVITES - ELEVES - Chapitre Complet.pdf")
    set efface to ((path to home folder) & "compilation:") as string
    set efface to quoted form of POSIX path of efface
    do shell script "rm -Rf " & efface
   
end tell

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

MilesTEG

Membre confirmé
29 Octobre 2007
263
14
38
Super, ça fonctionne très bien ;)
Et il n'y a plus d'erreurs ni même de message lorsque le script s'exécute :p
(enfin sur la seule exécution de matin).

Reste à voir si on peut optimiser la vitesse d'exécution :p
(sans changer le mac :angelic::siffle:)
En tout cas, vraiment merci beaucoup :merci::up:
 

zeltron54

Membre d’élite
29 Mars 2008
1 755
262
Lorraine
Bonjour,
pour gagner un peu de temps j'ai modifié le script, mais il faut d'abord avoir installer le logiciel exiftool à télécharger là :https://sourceforge.net/projects/exiftool/
à tester ....(chez moi 1mn 10sec pour 10 fichiers dont 7 avec ajout de page blanche)
le nouveau script:
Bloc de code:
tell application "Finder"
    set chemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers à traiter"
    make new folder at ((path to home folder) as string) with properties {name:"compilation"}
    make new folder at ((path to home folder) & "compilation" as string) with properties {name:"la_selection"}
    set chemin_compilation to ((path to home folder) & "compilation:") as string
    set chemin_selection to ((path to home folder) & "compilation:la_selection:") as string
    set chemin_pageblanche to ((path to home folder) & "pageblanche.pdf") as string
 
 
    set les_fichiers to files of chemin
    repeat with chaque_fichier in les_fichiers
        set nom to name of chaque_fichier as string
     
        if nom contains "eleve" and nom contains ".pdf" then
            duplicate chaque_fichier to chemin_selection
        end if
    end repeat
 
    set la_selection to chemin_selection as alias
    set les_fichiers to files of la_selection
    repeat with le_fichier in les_fichiers
        set nom to name of le_fichier
     
        if not (exists chemin_compilation & "la_compilation.pdf") then
            duplicate le_fichier to chemin_compilation
            set anciennom to chemin_compilation & nom as alias
            set name of anciennom to "la_compilation.pdf"
         
        else
         
            duplicate le_fichier to chemin_compilation
            set anciennom to chemin_compilation & nom as alias
            set name of anciennom to "suite.pdf"
         
            set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
            set fich to quoted form of POSIX path of fich
         
            set NP to do shell script "/usr/local/bin/exiftool -pagecount " & fich
            set NP to word 3 of NP
            if NP mod 2 is not 0 then
             
                set leblanc to chemin_pageblanche as string
                set leblanc to quoted form of POSIX path of leblanc
                set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
                set nouveau1 to quoted form of POSIX path of nouveau
                set lenew to fich & " " & leblanc
             
                do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
                do shell script "rm " & fich
                set nouveau to nouveau as alias
                set name of nouveau to "la_compilation.pdf"
            end if
         
            set le2 to ((path to home folder) & "compilation:suite.pdf") as string
            set le2 to quoted form of POSIX path of le2
            set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
            set nouveau1 to quoted form of POSIX path of nouveau
            set lenew to fich & " " & le2
         
            do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
            do shell script "rm " & fich
            do shell script "rm " & le2
            set nouveau to nouveau as alias
            set name of nouveau to "la_compilation.pdf"
         
        end if
     
    end repeat
    set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
    set Chapitre to word 1 of nom
    duplicate fich to chemin
    set chemin to chemin as string
    set chemin to chemin & "la_compilation.pdf" as alias
    set name of chemin to (Chapitre & " - ACTIVITES - ELEVES - Chapitre Complet.pdf")
    set efface to ((path to home folder) & "compilation:") as string
    set efface to quoted form of POSIX path of efface
    do shell script "rm -Rf " & efface
 
end tell

tell application "Finder"
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
 
Dernière édition:

MilesTEG

Membre confirmé
29 Octobre 2007
263
14
38
Un petit
Bloc de code:
brew install exiftool
dans iTerm et hop c'est installé.

Le script semble plus rapide, mais là je n'ai pas chronométré. Y a pas moyen de voir le temps au départ puis à la fin de l'exécution du script ? (écrit dans la console de l'applescript ?)

Sinon petite demande, ça pourrait être cool que le script remplace le fichier final fusionné s'il existe déjà, et du coup ne le prenne pas en compte dans la liste à fusionner s'il est déjà présent ;) Je risque d'oublier de supprimer une vieille version lol
 

zeltron54

Membre d’élite
29 Mars 2008
1 755
262
Lorraine
Il faudrait alors le supprimer au début du script, sinon il serait ajouté à la fusion, et le remplacer à la fin nous donnerais un fichier contenant l'ancienne fusion.
je regarde pour le supprimer au départ ...
 
  • J’aime
Réactions: MilesTEG

zeltron54

Membre d’élite
29 Mars 2008
1 755
262
Lorraine
OK, voilà le nouveau qui supprime le fichier de fusion s' il existe.

Bloc de code:
tell application "Finder"
    set chemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers à traiter"
    make new folder at ((path to home folder) as string) with properties {name:"compilation"}
    make new folder at ((path to home folder) & "compilation" as string) with properties {name:"la_selection"}
    set chemin_compilation to ((path to home folder) & "compilation:") as string
    set chemin_selection to ((path to home folder) & "compilation:la_selection:") as string
    set chemin_pageblanche to ((path to home folder) & "pageblanche.pdf") as string
   
    set les_fichiers to files of chemin
    repeat with chaque_fichier in les_fichiers
        set nom to name of chaque_fichier as string
       
        if nom contains "eleve" and nom contains ".pdf" then
            duplicate chaque_fichier to chemin_selection
        end if
    end repeat
   
    set la_selection to chemin_selection as alias
    set les_fichiers to files of la_selection
    repeat with le_fichier in les_fichiers
        set nom to name of le_fichier
        if nom contains "ACTIVITES - ELEVES - Chapitre Complet.pdf" then
            set cheminorigine to chemin as string
            set cheminorigine to cheminorigine & nom
            set cheminorigine to quoted form of POSIX path of cheminorigine
            do shell script "rm " & cheminorigine
            set efface to le_fichier as string
            set efface to quoted form of POSIX path of efface
            do shell script "rm  " & efface
        else
           
            if not (exists chemin_compilation & "la_compilation.pdf") then
                duplicate le_fichier to chemin_compilation
                set anciennom to chemin_compilation & nom as alias
                set name of anciennom to "la_compilation.pdf"
               
            else
               
                duplicate le_fichier to chemin_compilation
                set anciennom to chemin_compilation & nom as alias
                set name of anciennom to "suite.pdf"
               
                set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
                set fich to quoted form of POSIX path of fich
               
                set NP to do shell script "/usr/local/bin/exiftool -pagecount " & fich
                set NP to word 3 of NP
                if NP mod 2 is not 0 then
                   
                    set leblanc to chemin_pageblanche as string
                    set leblanc to quoted form of POSIX path of leblanc
                    set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
                    set nouveau1 to quoted form of POSIX path of nouveau
                    set lenew to fich & " " & leblanc
                   
                    do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
                    do shell script "rm " & fich
                    set nouveau to nouveau as alias
                    set name of nouveau to "la_compilation.pdf"
                end if
               
                set le2 to ((path to home folder) & "compilation:suite.pdf") as string
                set le2 to quoted form of POSIX path of le2
                set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
                set nouveau1 to quoted form of POSIX path of nouveau
                set lenew to fich & " " & le2
               
                do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
                do shell script "rm " & fich
                do shell script "rm " & le2
                set nouveau to nouveau as alias
                set name of nouveau to "la_compilation.pdf"
               
            end if
        end if
       
    end repeat
    set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
    set Chapitre to word 1 of nom
    duplicate fich to chemin
    set chemin to chemin as string
    set chemin to chemin & "la_compilation.pdf" as alias
    set name of chemin to (Chapitre & " - ACTIVITES - ELEVES - Chapitre Complet.pdf")
    set efface to ((path to home folder) & "compilation:") as string
    set efface to quoted form of POSIX path of efface
    do shell script "rm -Rf " & efface
   
end tell

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

zeltron54

Membre d’élite
29 Mars 2008
1 755
262
Lorraine
Oups !!! je m'étais compliqué la vie. j'ai refais une version plus logique.
Bloc de code:
tell application "Finder"
    set chemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers à traiter"
    make new folder at ((path to home folder) as string) with properties {name:"compilation"}
    make new folder at ((path to home folder) & "compilation" as string) with properties {name:"la_selection"}
    set chemin_compilation to ((path to home folder) & "compilation:") as string
    set chemin_selection to ((path to home folder) & "compilation:la_selection:") as string
    set chemin_pageblanche to ((path to home folder) & "pageblanche.pdf") as string
   
    set les_fichiers to files of chemin
    repeat with chaque_fichier in les_fichiers
        set nom to name of chaque_fichier as string
       
        if nom contains "eleve" and nom contains ".pdf" then
           
            if nom contains "ACTIVITES - ELEVES - Chapitre Complet.pdf" then
                set cheminorigine to chaque_fichier as string
                set cheminorigine to quoted form of POSIX path of cheminorigine
                do shell script "rm " & cheminorigine
            else
                duplicate chaque_fichier to chemin_selection
            end if
        end if
    end repeat
   
    set la_selection to chemin_selection as alias
    set les_fichiers to files of la_selection
    repeat with le_fichier in les_fichiers
        set nom to name of le_fichier
       
        if not (exists chemin_compilation & "la_compilation.pdf") then
            duplicate le_fichier to chemin_compilation
            set anciennom to chemin_compilation & nom as alias
            set name of anciennom to "la_compilation.pdf"
           
        else
           
            duplicate le_fichier to chemin_compilation
            set anciennom to chemin_compilation & nom as alias
            set name of anciennom to "suite.pdf"
           
            set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
            set fich to quoted form of POSIX path of fich
           
            set NP to do shell script "/usr/local/bin/exiftool -pagecount " & fich
            set NP to word 3 of NP
            if NP mod 2 is not 0 then
               
                set leblanc to chemin_pageblanche as string
                set leblanc to quoted form of POSIX path of leblanc
                set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
                set nouveau1 to quoted form of POSIX path of nouveau
                set lenew to fich & " " & leblanc
               
                do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
                do shell script "rm " & fich
                set nouveau to nouveau as alias
                set name of nouveau to "la_compilation.pdf"
            end if
           
            set le2 to ((path to home folder) & "compilation:suite.pdf") as string
            set le2 to quoted form of POSIX path of le2
            set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
            set nouveau1 to quoted form of POSIX path of nouveau
            set lenew to fich & " " & le2
           
            do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
            do shell script "rm " & fich
            do shell script "rm " & le2
            set nouveau to nouveau as alias
            set name of nouveau to "la_compilation.pdf"
           
        end if
       
    end repeat
    set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
    set Chapitre to word 1 of nom
    duplicate fich to chemin
    set chemin to chemin as string
    set chemin to chemin & "la_compilation.pdf" as alias
    set name of chemin to (Chapitre & " - ACTIVITES - ELEVES - Chapitre Complet.pdf")
    set efface to ((path to home folder) & "compilation:") as string
    set efface to quoted form of POSIX path of efface
    do shell script "rm -Rf " & efface
   
end tell

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

MilesTEG

Membre confirmé
29 Octobre 2007
263
14
38
Nickel :D Merci bien ;)

Est-ce possible d'avoir ce script accessible via un clic droit dans le Finder ?
En gros, je clic droit sur le dossier voulu, et paf, il fait son boulot ? (sans me demander le chemin d'accès ?)
 

zeltron54

Membre d’élite
29 Mars 2008
1 755
262
Lorraine
Je ne sais pas faire pour que le script soit accessible depuis un clic droit.
Mais je t'ai préparé une version "droplet" ....
Tu enregistres cette version en temps qu'application (enregistrer sous--> et en bas de la fenêtre choisis application)
Tu obtiens une appli avec une icône ayant une flèche dessus...
Tu glisses cette appli dans le dock.
Pour faire le job, tu glisses simplement ton dossier sur cet icône.
Suivant la version de ton système lors du premier lancement il va te demander d 'autoriser cette appli à contrôler le finder , tu acceptes...
Et c'est bon...
 
Dernière édition:

zeltron54

Membre d’élite
29 Mars 2008
1 755
262
Lorraine
Bloc de code:
on open chemin
    set chemin to chemin as alias
    tell application "Finder"
        make new folder at ((path to home folder) as string) with properties {name:"compilation"}
        make new folder at ((path to home folder) & "compilation" as string) with properties {name:"la_selection"}
        set chemin_compilation to ((path to home folder) & "compilation:") as string
        set chemin_selection to ((path to home folder) & "compilation:la_selection:") as string
        set chemin_pageblanche to ((path to home folder) & "pageblanche.pdf") as string
       
        set les_fichiers to files of chemin
        repeat with chaque_fichier in les_fichiers
            set nom to name of chaque_fichier as string
           
            if nom contains "eleve" and nom contains ".pdf" then
               
                if nom contains "ACTIVITES - ELEVES - Chapitre Complet.pdf" then
                    set cheminorigine to chaque_fichier as string
                    set cheminorigine to quoted form of POSIX path of cheminorigine
                    do shell script "rm " & cheminorigine
                else
                    duplicate chaque_fichier to chemin_selection
                end if
            end if
        end repeat
       
        set la_selection to chemin_selection as alias
        set les_fichiers to files of la_selection
        repeat with le_fichier in les_fichiers
            set nom to name of le_fichier
           
            if not (exists chemin_compilation & "la_compilation.pdf") then
                duplicate le_fichier to chemin_compilation
                set anciennom to chemin_compilation & nom as alias
                set name of anciennom to "la_compilation.pdf"
               
            else
               
                duplicate le_fichier to chemin_compilation
                set anciennom to chemin_compilation & nom as alias
                set name of anciennom to "suite.pdf"
               
                set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
                set fich to quoted form of POSIX path of fich
               
                set NP to do shell script "/usr/local/bin/exiftool -pagecount " & fich
                set NP to word 3 of NP
                if NP mod 2 is not 0 then
                   
                    set leblanc to chemin_pageblanche as string
                    set leblanc to quoted form of POSIX path of leblanc
                    set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
                    set nouveau1 to quoted form of POSIX path of nouveau
                    set lenew to fich & " " & leblanc
                   
                    do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
                    do shell script "rm " & fich
                    set nouveau to nouveau as alias
                    set name of nouveau to "la_compilation.pdf"
                end if
               
                set le2 to ((path to home folder) & "compilation:suite.pdf") as string
                set le2 to quoted form of POSIX path of le2
                set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
                set nouveau1 to quoted form of POSIX path of nouveau
                set lenew to fich & " " & le2
               
                do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
                do shell script "rm " & fich
                do shell script "rm " & le2
                set nouveau to nouveau as alias
                set name of nouveau to "la_compilation.pdf"
               
            end if
           
        end repeat
        set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
        set Chapitre to word 1 of nom
        duplicate fich to chemin
        set chemin to chemin as string
        set chemin to chemin & "la_compilation.pdf" as alias
        set name of chemin to (Chapitre & " - ACTIVITES - ELEVES - Chapitre Complet.pdf")
        set efface to ((path to home folder) & "compilation:") as string
        set efface to quoted form of POSIX path of efface
        do shell script "rm -Rf " & efface
       
    end tell
   
    tell application "Finder"
        (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
    end tell
   
end open
 

MilesTEG

Membre confirmé
29 Octobre 2007
263
14
38
Hello,
Ça fonctionne très bien ;)

Je voudrais savoir s'il était possible de nommer le fichier final avant son déplacement ?
En gros qu'il ait son nom final dans le dossier de compilation.

Puis, au lieu de le supprimer dans la destination, faire un déplacement du fichier avec écrasement de l'existant ?
C'est possible ça ?
Je demande ça car mon antivirus bloque les commande rm dans certains dossiers dont font parti mes dossiers de cours. Il me demande l'autorisation de laisser la commande rm se faire avec mon mot de passe. Du coup ça rallonge un peu la durée.
peut-être qu'une commande de déplacement avec écrasement ?

En tout cas, je te remercie beaucoup :)

PS : demande juste cosmétique : est-il possible d'avoir une barre de progression de l'avancement de la fusion d'une manière ou d'une autre ? :siffle:
 

zeltron54

Membre d’élite
29 Mars 2008
1 755
262
Lorraine
Bonjour,
Pour la barre de progression... malheureusement , non

Pour l'histoire de ton antivirus, Il me semble que un écrasement du fichier produira la même alerte que sa suppression ... à vérifier chez toi !
J'ai trouvé une solution pour mettre l'appli dans service du clic droit. On pourra faire ça lorsque le script sera terminé...
 

MilesTEG

Membre confirmé
29 Octobre 2007
263
14
38
Bonjour,
Pour la barre de progression... malheureusement , non

Pour l'histoire de ton antivirus, Il me semble que un écrasement du fichier produira la même alerte que sa suppression ... à vérifier chez toi !
J'ai trouvé une solution pour mettre l'appli dans service du clic droit. On pourra faire ça lorsque le script sera terminé...
Je me doutais de la réponse pour la barre de progression ;)
Pas grave.

Sinon pour le déplacement avec écrasement, on peut le faire via une commande de finder ? (avec ça : tell application "Finder" )
Si c'est possible, y a peut-être moyen que mon Bitdefender ne râle pas :D
 

zeltron54

Membre d’élite
29 Mars 2008
1 755
262
Lorraine
la commande que tu donne signifie juste (dans l'application finder) elle ne fait que signifier que les commandes suivantes seront à effectuer avec finder.

Je crois juste que ton antivirus n'acceptera pas plus l'écrasement d'un fichier que sa suppression. De toute manière le système enverra une alerte de fichier existe, et comme elle viens du système je ne pense pas que l'on puisse l'éviter... à voir
Peut être essayer s'il accepte que l'on renomme le fichier ?
 
Dernière édition:

zeltron54

Membre d’élite
29 Mars 2008
1 755
262
Lorraine
Je te joins un nouveau script à enregistrer en application - droplet
ce script renomme le fichier final puis le déplace avec écrasement (voir si antivirus le supporte)
Bloc de code:
on open chemin
    set chemin to chemin as alias
    tell application "Finder"
        make new folder at ((path to home folder) as string) with properties {name:"compilation"}
        make new folder at ((path to home folder) & "compilation" as string) with properties {name:"la_selection"}
        set chemin_compilation to ((path to home folder) & "compilation:") as string
        set chemin_selection to ((path to home folder) & "compilation:la_selection:") as string
        set chemin_pageblanche to ((path to home folder) & "pageblanche.pdf") as string
      
        set les_fichiers to files of chemin
        repeat with chaque_fichier in les_fichiers
            set nom to name of chaque_fichier as string
          
            if nom contains "eleve" and nom contains ".pdf" then
              
                if nom contains "ACTIVITES - ELEVES - Chapitre Complet.pdf" then
                  
                else
                    duplicate chaque_fichier to chemin_selection
                end if
            end if
        end repeat
      
        set la_selection to chemin_selection as alias
        set les_fichiers to files of la_selection
        repeat with le_fichier in les_fichiers
            set nom to name of le_fichier
          
            if not (exists chemin_compilation & "la_compilation.pdf") then
                duplicate le_fichier to chemin_compilation
                set anciennom to chemin_compilation & nom as alias
                set name of anciennom to "la_compilation.pdf"
              
            else
              
                duplicate le_fichier to chemin_compilation
                set anciennom to chemin_compilation & nom as alias
                set name of anciennom to "suite.pdf"
              
                set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
                set fich to quoted form of POSIX path of fich
              
                set NP to do shell script "/usr/local/bin/exiftool -pagecount " & fich
                set NP to word 3 of NP
                if NP mod 2 is not 0 then
                  
                    set leblanc to chemin_pageblanche as string
                    set leblanc to quoted form of POSIX path of leblanc
                    set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
                    set nouveau1 to quoted form of POSIX path of nouveau
                    set lenew to fich & " " & leblanc
                  
                    do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
                    do shell script "rm " & fich
                    set nouveau to nouveau as alias
                    set name of nouveau to "la_compilation.pdf"
                end if
              
                set le2 to ((path to home folder) & "compilation:suite.pdf") as string
                set le2 to quoted form of POSIX path of le2
                set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
                set nouveau1 to quoted form of POSIX path of nouveau
                set lenew to fich & " " & le2
              
                do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
                do shell script "rm " & fich
                do shell script "rm " & le2
                set nouveau to nouveau as alias
                set name of nouveau to "la_compilation.pdf"
              
            end if
          
        end repeat
        set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
        set Chapitre to word 1 of nom
        set renom to (Chapitre & " - ACTIVITES - ELEVES - Chapitre Complet.pdf") as string
        set fich to fich as alias
        set name of fich to renom
        set fich to ((path to home folder) & "compilation:" & renom) as string
        set fich to fich as alias
        move fich to chemin with replacing
        set efface to ((path to home folder) & "compilation:") as string
        set efface to quoted form of POSIX path of efface
        do shell script "rm -Rf " & efface
      
    end tell
  
    tell application "Finder"
        (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
    end tell
  
end open
 
Dernière édition:

MilesTEG

Membre confirmé
29 Octobre 2007
263
14
38
Yeah ! Ça fonctionne super bien ;)
Sans que Bitdefender me fasse une alerte :)
Trop bien ;)

Merci
Je vais regarder si je peux pas mettre une notification disant combien de fichiers sont à fusionner, et qu'elle indique à quel fichier on en est quand on le fusionne. Ça remplacerait la barre de progression qui n'est pas possible...

en tout cas, merci beaucoup ^^
 

zeltron54

Membre d’élite
29 Mars 2008
1 755
262
Lorraine
Bonjour,

Content que cela fonctionne...
Si tu es toujours interessé pour avoir le lancement apr un clic droit sur le dossier.
J'ai trouvé comment mettre l'application dans un service accessible par clic droit sur le dossier.

Tu ouvres un nouveau automator.
Tu choisis "action rapide"
tu sélectionnes dossier et dans finder (voir copie écran).
tu ajoutes une action exécuter un script Applescript
Tu colles dans cette action le script que je te joins
Tu enregistres sous le nom qui te convient

Tu trouvera le script dans services lors d'un clic droit sur le dossier.
Pendant l'exécution du script une petite roue dentée tourne dans la barre supérieur coté gauche.

Capture d’écran 2019-09-11 à 09.29.11.png
 

zeltron54

Membre d’élite
29 Mars 2008
1 755
262
Lorraine
le script pour service...
Bloc de code:
on run {input, parameters}
   
   
    set chemin to input as alias
    tell application "Finder"
        make new folder at ((path to home folder) as string) with properties {name:"compilation"}
        make new folder at ((path to home folder) & "compilation" as string) with properties {name:"la_selection"}
        set chemin_compilation to ((path to home folder) & "compilation:") as string
        set chemin_selection to ((path to home folder) & "compilation:la_selection:") as string
        set chemin_pageblanche to ((path to home folder) & "pageblanche.pdf") as string
       
        set les_fichiers to files of chemin
        repeat with chaque_fichier in les_fichiers
            set nom to name of chaque_fichier as string
           
            if nom contains "eleve" and nom contains ".pdf" then
               
                if nom contains "ACTIVITES - ELEVES - Chapitre Complet.pdf" then
                   
                else
                    duplicate chaque_fichier to chemin_selection
                end if
            end if
        end repeat
       
        set la_selection to chemin_selection as alias
        set les_fichiers to files of la_selection
        repeat with le_fichier in les_fichiers
            set nom to name of le_fichier
           
            if not (exists chemin_compilation & "la_compilation.pdf") then
                duplicate le_fichier to chemin_compilation
                set anciennom to chemin_compilation & nom as alias
                set name of anciennom to "la_compilation.pdf"
               
            else
               
                duplicate le_fichier to chemin_compilation
                set anciennom to chemin_compilation & nom as alias
                set name of anciennom to "suite.pdf"
               
                set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
                set fich to quoted form of POSIX path of fich
               
                set NP to do shell script "/usr/local/bin/exiftool -pagecount " & fich
                set NP to word 3 of NP
                if NP mod 2 is not 0 then
                   
                    set leblanc to chemin_pageblanche as string
                    set leblanc to quoted form of POSIX path of leblanc
                    set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
                    set nouveau1 to quoted form of POSIX path of nouveau
                    set lenew to fich & " " & leblanc
                   
                    do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
                    do shell script "rm " & fich
                    set nouveau to nouveau as alias
                    set name of nouveau to "la_compilation.pdf"
                end if
               
                set le2 to ((path to home folder) & "compilation:suite.pdf") as string
                set le2 to quoted form of POSIX path of le2
                set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
                set nouveau1 to quoted form of POSIX path of nouveau
                set lenew to fich & " " & le2
               
                do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
                do shell script "rm " & fich
                do shell script "rm " & le2
                set nouveau to nouveau as alias
                set name of nouveau to "la_compilation.pdf"
               
            end if
           
        end repeat
        set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
        set Chapitre to word 1 of nom
        set renom to (Chapitre & " - ACTIVITES - ELEVES - Chapitre Complet.pdf") as string
        set fich to fich as alias
        set name of fich to renom
        set fich to ((path to home folder) & "compilation:" & renom) as string
        set fich to fich as alias
        move fich to chemin with replacing
        set efface to ((path to home folder) & "compilation:") as string
        set efface to quoted form of POSIX path of efface
        do shell script "rm -Rf " & efface
       
    end tell
  
    tell application "Finder"
        (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
    end tell
  
   
    return input
end run