# Automator : créer xml et dossier par le nom d'un fichier



## ccciolll (24 Janvier 2014)

Bonjour,

Voici un opération que je fais régulièrement à la main.

Je crée mon fichier PDF en lui donnant un nom comportant une base mobile et un base fixe, genre :
*LeNomDuFichierQuiVarieÀChaqueFois*-ID*nnnn*.SLX.PDF

Les deux parties en gras sont celles qui varient (elle varient en contenu ET en nombre de caractères). La partie gras soulignée est l'identifiant unique, c'est un nombre.

Donc, avec ça, je dois effectuer les actions suivantes.
Copier le nom complet du fichier et le coller dans un code xml qui lui ne varie jamais. Ce qui donne en gros

_Le début du code xml "*nomdufichier*" la fin du code xml_

(il existe des variantes du genre : _Le début du code xml "*nomdufichier*" page1 "*nomdufichier*" page2 la fin du code xml_ mais je ne pense pas que ça fasse une grosse différence à programmer, ce serait juste un automator différent).

Le nom du xml lui ne change jamais (on l'appelle perso.xml)

Et ensuite je mets les 2 fichiers (le pdf et le xml) dans un dossier qui est nommé par l'identifiant unique indiqué en gras-souligné.

Donc en résumé, il faudrait réussiir à, quand j'appelle l'un de mes fichiers pdf
1 - copier le nom complet du fichier que j'appelle (ça devient la variable1)
2 - coller le début du code (qui est toujours identique) + le nom du fichier (la variable1) + la fin du code (qui est toujours identique aussi)
3 - enregistrer le résultat obtenu en xml avec le nom "perso.xml"
4 - extraire de la variable1 une variable2 qui est le texte compris entre "-ID" et ".SLX.pdf"
5 - créer un dossier
6 - nommer ce dossier par la variable2
7 - coller le fichier pdf appelé et le xml créé dans ce dossier


On avait déjà réussi à faire une partie de la programmation (créer un dossier à partir d'un nom de fichier et y coller ledit fichier) pour un autre usage :
http://forums.macg.co/mac-os-x/creer-un-nom-de-dossier-a-partir-d-un-nom-de-fichier-255904.html

Donc avant de commencer à essayer de programmer ça, je voudrais déjà avoir une opinion de est-ce faisable en automator, et ensuite est-ce qu'un débutant (moi, quoi) en est capable.


----------



## ccciolll (8 Octobre 2014)

Je crois que ce silence de plusieurs mois doit signifier un truc genre « non seulement c'est à peu près impossible à faire mais comment peux-tu croire une seule seconde qu'un débutant comme toi en serait capable ».

C'est bien dommage.


----------



## JacqR (9 Octobre 2014)

Bonsoir,

Moi je peux t'aider, je ne crois pas que ce soit faisable dans Automator sans aucun script.

Donc, voici la méthode pour faire cela dans *Automator* avec un script *Bash*

Ouvre *Automator*.
Sélectionne ("Service", "Application" ou "Action de dossier") comme type de document.
Si tu as choisi "*Service*", sélectionne "Fichiers PDF" et "Finder" dans les menus des popups en haut du workflow.
Si tu as choisi "*Action de dossier*", sélectionne le dossier où seront déposés les PDF.

Ajoute l'action "Exécuter un script Shell"
Sélectionne "/bin/bash/" et "comme arguments" dans les menus des popups de l'action "Exécuter un script Shell".
Supprime tout le texte dans l'action, copie/colle ce script dans l'action.

```
xmlDebut='<?xml version="1.0" encoding="UTF-8"?>\n"<filename>"\n'
xmlFin='\n</filename>'

for f in "$@"
do
    if [[ "$f" = *'.pdf' ]]; then ## le nom se termine par ".pdf"
       cd "${f%/*}"
       var1=${f##*/}; id=${var1##*-ID};var2=${id%.SLX*}
       printf "$xmlDebut$var1$xmlFin" > "perso.xml" ## écrit le XML dans le fichier perso.xml
       mkdir -p "$var2"; mv -f "perso.xml" "$var1" "$var2" ## déplace le fichier perso.xml et le PDF dans le dossier créé
    fi
done
```

Dans le script, vous pouvez modifier les deux premières lignes par votre code XML (seulement le texte entre les ' '), les \n signifie une fin de ligne
Enregistre-le workflow, quitte Automator.


Pour exécuter le workflow:
Si tu as choisi "*Service*", il suffit de faire un clic-droit sur le(s) *PDF*(s) dans le *Finder* et de sélectionner le service que tu as enregistré
Si tu as choisi "*Action de dossier*", il suffit de déposer un ou des fichier(s) PDF dans le dossier de l'action de dossier.
Si tu as choisi "*Application*", il suffit de déposer le(s) fichier(s) PDF sur l'icône de l'application.


----------



## ccciolll (9 Octobre 2014)

WOUAOW !!!


Pour un premier post sur macg tu as fait FORT !

Ça marche du tonnerre, j'en ai la chair de poule !!!

Eh beeeen, je ne sais pas quoi dire d'autre que « bravo ».
C'est efficace, super bien expliqué, j'ai réussi du premier coup à l'appliquer.

Bienvenue sur macg, dis-donc !


----------



## JacqR (9 Octobre 2014)

Bonjour,



ccciolll a dit:


> C'est efficace, super bien expliqué, j'ai réussi du premier coup à l'appliquer.



Content que cela fonctionne du premier coup. 



ccciolll a dit:


> Bienvenue sur macg, dis-donc !


Merci beaucoup.


----------



## ccciolll (14 Novembre 2014)

Hello,

je viens de recycler (oh, pas énormément, mais assez pour en être fier) ton code pour un usage avec 2 insertions.

Le code donne ceci : 
	
	



```
xmlDebut='<doc>\n<page frompdf="'
xmlMilieu='" pagepdf="1">\n</page>\n<page frompdf="'
xmlFin='" pagepdf="2">\n</page>\n</doc>'

for f in "$@"
do
    if [[ "$f" = *'.pdf' ]]; then ## le nom se termine par ".pdf"
       cd "${f%/*}"
       var1=${f##*/}; id=${var1##*-ID};var2=${id%.SLX*}
       printf "$xmlDebut$var1$xmlMilieu$var1$xmlFin" > "perso.xml" ## écrit le XML dans le fichier perso.xml
       mkdir -p "$var2"; mv -f "perso.xml" "$var1" "$var2" ## déplace le fichier perso.xml et le PDF dans le dossier créé
    fi
done
```

et je précise, car j'ai eu un doute à ce sujet, que pour « enregistrer le workflow » il faut aller dans Fichier > Enregistrer.


----------

