IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AppleScript Discussion :

affectation d'actions dossier [AppleScript]


Sujet :

AppleScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Novembre 2003
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2003
    Messages : 37
    Par défaut affectation d'actions dossier
    Bonsoir,


    Pour mon workflow photo, j'ai découvert les actions de dossiers qui vont mettre hyper utiles mais que je ne maitrise pas du tout.

    je suis partie sur le auto http://mac.developpez.com/cours/acti...script/#LIII-B de PBELL mais je n'arrive à rien et impossible de debug. L'affection de mon second "action de dossier" sur les sous dossiers ne fonctionne pas du coup pas de création des sous dossier.


    voici le process complet:

    je lance le script sh suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    cd /Users/Christophe/Pictures/DDP\ EOS
    exiftool -artist="ROUSSEAU Christophe" -v '-Directory<DateTimeOriginal' -d /Users/christophe/Pictures/Workflow/artistique/%Y/"%Y %B %d"/RAW -r * -ext CR2
    exiftool -artist="ROUSSEAU Christophe" -v '-Directory<DateTimeOriginal' -d /Users/christophe/Pictures/Workflow/artistique/%Y/"%Y %B %d"/JPG -r * -ext JPG
    rm *.*
    cela me permet de tagger mes photos raw avec mon nom et surtout de les déplacer dans une arborescence automatique situé dans le dossier "/Users/christophe/Pictures/Workflow/artistique/". ExifTool créer s'il n'existe pas les sous dossiers dans mon cas dossier année et ensuite jour de la prise de vue réelle.


    cela fonctionne super bien...

    Je veux pousser l'automatisme jusqu'au bout en créant dans chaque dossier date d'autre dossier voici un exemple pour être plus claire:

    exiftool me créer le dossier 2015 s'il n'existe pas et ensuite var créer le dossier "2015 juillet 25" ( date de la pris de vue) et enfin le dossier RAW dans lequel il copie le fichier image.

    comme je ne sais pas trop géré les affectation j'ai créer manuellement le dossier 2013,2014,2015,etc... et j'y affecte mon action de dossier.


    Mes actions de dossiers sont au nombre de deux le premier doit affecté au dossier "2015 juillet 25" le second action sur dossier et cela pour chaque sous dossier....

    Le second créer les dossiers pour mes futur traitement, à savoir JPG, TIFF, JPG-WEB,JPG-EDITION dans le dossier "2015 juillet 25" dés que le dossier "raw" est créé.


    voici les scripts en détail:


    script sur le dossier 2015 qui affecte l'autre script.

    prepa-arbo-workflow.scpt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    (*
    	-- Ce script est déclenché par une action de dossier "add item" sur le dossier parent
    	-- si l'action est un l'ajout d'un sous-dossier,
    	- alors ce script assigne une action de dossier prédéfinie à ce nouveau sous-dossier
    	-- © PBell 2012-05 
     
    	Adapter par Christophe le 30 juillet 2015
    *)
     
     
    on adding folder items to Mon_Dossier after receiving Liste_Fichiers
     
    	-- Mettre ici le nom du script à ajouter à la création d'un sous-dossier
    	-- Ce script doit exister dans votre Folder Action Script !!
    	set Script_sous_Dossier to "workflow-ajout-dossier.scpt"
     
    	-- Récupération du chemin par défaut des Folder Action Scripts dans le domaine utilisateur
    	tell application "System Events" to set Dossier_Scripts to ¬
    		(path to Folder Action scripts folder from user domain) as string
    	set Mon_Script to (Dossier_Scripts & Script_sous_Dossier)
     
    	tell application "Finder" to display dialog "je suis à la ligne 5"
     
    	-- Vérification que le script prédéfini existe. Sinon, on quitte le script !
    	tell application "Finder"
    		tell application "Finder" to display dialog "je suis à la ligne 7"
    		if not (exists file Mon_Script) then return
    		tell application "Finder" to display dialog "je suis à la ligne 8"
    		display dialog "action annulée" buttons {"OK"} default button 1 giving up after 5
    		tell application "Finder" to display dialog "je suis à la ligne 9"
     
    		-- Boucle sur chaque item ajouté = un ou plusieurs sous-dossiers)
    		repeat with Un_Item in Liste_Fichiers
    			tell application "Finder" to display dialog "je suis à la ligne 11"
    			if (kind of Un_Item) is "dossier" then
    				-- C'est un dossier, on ajoute l'action de dossier
    				tell application "System Events" to attach action to Un_Item as alias ¬
    					using (Mon_Script as string)
    				tell application "Finder" to display dialog "je suis à la ligne 15"
    			end if
    		end repeat -- fin de boucle sur les items ajoutés
    	end tell
    end adding folder items to

    voici le script qui créer les sous dossiers

    workflow-ajout-dossier.scpt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    (*  Script d'action de dossier : 
     
    Lors de l'ajout de fichiers dans le dossier, on vérifie leur type 
    Si le type est incorrect, le fichier sera copié dans un sous-dossier de rejet
     
    Si le dossier de rejet n'existe pas déjà, on le crée dans le dossier.
    *)
     
    on adding folder items to Mon_Dossier after receiving Liste_Fichiers
    	tell application "Finder"
    		-- Pour éviter que l'ajout du dossier Dos_Rejet ne crée aussi un événement,
    		-- On teste ce qui est ajouté et, éventuellement, on ne fait rien !
    		if name of first item of Liste_Fichiers is "JPG" then return
    		if name of first item of Liste_Fichiers is "TIFF" then return
    		if name of first item of Liste_Fichiers is "JPG-WEB" then return
    		if name of first item of Liste_Fichiers is "JPG-EDITION" then return
     
    		-- Vérifie si le sous dossier existe déjà, sinon, le crée
    		if not (exists folder "JPG" of Mon_Dossier) then
    			make new folder at Mon_Dossier with properties {name:"JPG"}
    			-- Attention, cet ajout génère un event add folder items !! -> d'où le premier test !
    		end if
    		if not (exists folder "TIFF" of Mon_Dossier) then
    			make new folder at Mon_Dossier with properties {name:"TIFF"}
    			-- Attention, cet ajout génère un event add folder items !! -> d'où le premier test !
    		end if
    		if not (exists folder "JPG-WEB" of Mon_Dossier) then
    			make new folder at Mon_Dossier with properties {name:"JPG-WEB"}
    			-- Attention, cet ajout génère un event add folder items !! -> d'où le premier test !
    		end if
    		if not (exists folder "JPG-EDITION" of Mon_Dossier) then
    			make new folder at Mon_Dossier with properties {name:"JPG-EDITION"}
    			-- Attention, cet ajout génère un event add folder items !! -> d'où le premier test !
    		end if
     
     
    		display dialog "Opération terminée"
    	end tell
    end adding folder items to

    merci pour l'aide que vous pourrez m'apporter sur mon problème.

    cordialement.

  2. #2
    Membre émérite

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 606
    Par défaut
    Bonjour,
    j'ai relu 2 fois ton message complet, mais je ne suis pas certain d'avoir compris.
    Je vais donc reformuler, pour essayer d'y voir plus clair, n'hésite pas à me corriger :

    Tu as déjà crée manuellement les dossiers d'année 2013, 2014, 2015 qui sont donc vides et tu leur assignes l'action de dossier N°1.
    Ton script SH marque tes photos et les place dans des sous dossiers qu'il crée lui-même, dans les dossiers Année.

    Normalement, cette création de sous dossier via script déclenche le script N°1 (ajout de sous dossiers).
    Celui-ci assigne aux sous dossiers crées l'action de dossier "workflow-ajout-dossier".
    Je suppose que tu as bien les traces des display dialog... du N°1 au N°15.
    Je suppose aussi que tu as vérifié à ce stade, que tes sous-dossiers par date, situés dans le dossier Année, sont bien associés au script workflow-ajout-dossier.
    Exact ? Si oui, tout va bien pour le moment.

    Si j'ai bien compris ensuite, tu souhaites que ton script SH, qui ajoute ton fichier RAW dans le sous dossier par date, déclenche le second script (qui crée d'autres sous-dossier au dossier par date). Mais le N°2 ne se déclenche pas !
    J'ai bien peur que ton script SH ne place ta photo ROW dans les sous-dossiers AVANT que le N°1 n'assigne une action de dossier à ces sous-dossier...
    En effet, comme expliqué dans l'article, les actions de dossiers ont un temps de latence avant leur déclenchement.
    Ton Shell script n'en a pas. Il y a de forte chance que l'action de dossier soit associée au sous-dossier bien après que le fichier y ai été déposé (bien après à l'échelle du processeur !)


    Comment le confirmer ?
    1) vérifie que les sous-dossiers par date ont bien une action de dossier N°2 associée.
    2) Ajoute manuellement un fichier quelconque, mais dont le nom n'est pas JPG, ni TIFF, ni JPG-WEB ni JPG-EDITION, dans ce sous-dossier: le script N°2 doit se déclencher et créer les 4 sous-dossiers (car je suppose qu'ils n'existent pas déjà).
    Cela prouvera que ton script N°2 se déclenche bien, mais qu'il est associé au sous-dossier, APRES que ton script Shell n'y ai ajouté quelque chose.

    Si tout ceci est confirmé (donc si j'ai bien compris), il ne s'agit pas d'un problème de script, mais d'analyse de ce que tu veux faire.
    Il faut donc aborder ce que tu veux faire autrement.

    Par exemple une seule action de dossier sur un dossier de dépôt de photos Raw qui effectue à chaque dépôt les action suivantes : (boucle sur chaque fichier ajouté)
    1) Extrait l'année, le mois, le jour du fichier
    2) marque ce fichier via un do shell script "Exif....."
    3) change le nom du fichier
    4) cherche si le dossier année existe, sinon, le crée
    5) cherche dans le dossier année (qui désormais existe toujours grâce à l'étape précédente !) le dossier mois/jour et le crée si nécessaire: si la création est nécessaire, création dans la foulé des 4 sous-dossier JPG,... à l'intérieur
    6) déplace le fichier photo RAW dans le sous dossier date
    7) boucle sur le prochain fichier RAW

    Entre 6) et 7) tu peux aussi renommer le fichier RAW voir le supprimer du dossier de dépôt initial pour éviter les doublons.
    Pour optimiser, tu peux aussi placer l'étape Exif avant la boucle sur chaque fichier RAW

    Cordialement

  3. #3
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Novembre 2003
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2003
    Messages : 37
    Par défaut
    Bonjour,

    Déjà merci d'avoir pris le temps de lire deux fois ma demande et surtout d'y avoir répondus. je viens juste de voir votre réponse et vous vous doutez bien que j'ai fais énormément d'essais pour résoudre mon probléme. j'ai même contacté une autre personne qui m'a fortement aidé en m'indiquant que les actions ne portais plus le même nom.

    Donc après de nombreux test en prenant exemple sur les scripts présent sur mon mac et les bonne commande, il est apparus clairement qu'il est impossible de faire ce que j'imaginais au départ car les automatismes se déclenchent trop tard.

    Comme je viens de lire votre message, je constate que j'ai imaginé une solution quasi équivalente à ce que vous proposer.

    Je vais donc tout faire sur un seul applescript et il sera affecter à mon dossier de depot temporaire de mes RAW, du coups je recommence donc à 0.

    Donc voici ma problématique de base pour récupérer la date de création du fichier raw. Voici le bout de script que je tente d'executer et qui me retourne une erreur -43 car le fichier n'est pas trouvé alors qu'il existe bien à l'emplacemnt stocker dans la variable path1.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    set commande1 to "/usr/local/bin/exiftool -DateTimeOriginal"
    set path1 to "Macintosh HD:Users:christophe:IMG_1589.CR2" as alias
     
    tell application "System Events"
     
    	set mySlug to do shell script commande1 & path1
     
    	log " message : " & mySlug
    end tell
    je me doute que cette question est stupide mais j'ai besoin de faire ce test pour arriver à récupérer le résultat de la commande1. Ce qui par la suite va me permettre de créer mon arborescence complete et y déplacer mes fichiers RAW....


    Cordialement.

  4. #4
    Membre émérite

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 606
    Par défaut
    Bonsoir,
    Je pense que l'erreur rencontrée vient de l'espace dans le chemin du fichier entre "Macintosh" et "HD", d'un part, et du fait que exiftool s'attend à une chemin Unix et non un chemin Finder.

    Explications :
    Le Shell unix (appelé lors du "do shell script") interprète les espaces comme des séparateurs de variables ou de paramètres.
    Donc la commande interprétée est :
    - instruction : exiftool (correct !)
    - paramètre : -DateTimeOriginal (correct)
    - nom du fichier : Mactintosh (ce fichier n'existe pas)
    en plus, il reste à interpréter HD:User:Christophe:IMG1589.CR2, dont exiftool ne sait que faire.

    Enfin, les niveaux d'arborescence des chemins de fichier en Unix ont des "/", alors que ceux du Finder ont des ":".

    Pour faire convertir les chemins Finder en Unix, il faut utiliser la commande Posix path en Applescript.
    pour éviter les problème d'espaces dans les noms de dossier ou de fichiers, il faut les mettre entre guillements (les ' de unix), ce qui se fait avec l'instruction Applescript "Quoted form of"

    En synthèse, il faut donc ajouter une ligne après la ligne "set path1...", avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set UnixPath to POSIX path of quoted form of path1
    et changer la commande do shell script par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set mySlug to do shell script commande1 & " " & UnixPath
    Bien noter aussi l'espace ajouté entre commande1 et Unixpath pour séparer les paramètres -DateTimeOriginal et le fichier image.

    Cordialement

  5. #5
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Novembre 2003
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2003
    Messages : 37
    Par défaut
    Bonsoir,

    merci pour la réponse. j'ai pu sacrément avancé sur mon script....

    cordialement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Affecter une action sur le clic de la molette
    Par Djang0 dans le forum C++Builder
    Réponses: 1
    Dernier message: 27/08/2009, 17h59
  2. [struts,javascript] probleme d'affectation d'action
    Par sallemel dans le forum Struts 1
    Réponses: 1
    Dernier message: 20/11/2008, 18h15
  3. Réponses: 2
    Dernier message: 26/05/2008, 15h27
  4. Réponses: 10
    Dernier message: 11/04/2008, 13h37
  5. Réponses: 6
    Dernier message: 15/05/2006, 17h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo