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

ccciolll

Membre expert
Club iGen
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-IDnnnn.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.
 
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.
 
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.
Bloc de code:
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.
 
  • J’aime
Réactions: ccciolll
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 !
 
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 :
Bloc de code:
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.