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 :

Action de dossier : lancer une application suite à ajout/suppression/modification


Sujet :

AppleScript

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Agent Immobilier
    Inscrit en
    Mars 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Agent Immobilier
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Action de dossier : lancer une application suite à ajout/suppression/modification
    Bonjour à tous,

    d'abord merci pour toutes les infos que j'ai pu trouver ici, en piochant au hasard dans les posts "résolus" des internautes.

    Je rencontre un soucis sur un script d'action de dossier. Je m'explique : j'utilise régulièrement dropbox pour faire le lien entre les fichiers que je reçois sur mon mac et l'interface Citrix qui me permet d'aller sur le serveur du boulot...

    Et j'aimerais un applescript qui, pour tout ajout/suppression/modification de fichier dans dropbox et les sous-dossier de dropbox, me lance l'application dropbox.

    (En abusant un peu, s'il existait un script pour fermer dropbox une fois que tous les fichiers sont à jour, ca serait merveilleux. Mais c'est beaucoup plus optionnel que ma demande précédente)

    J'ai essayé plein de manipulations différentes, rien ne fonctionne :/

    Merci d'avance

  2. #2
    Modérateur

    Avatar de kOrt3x
    Homme Profil pro
    Technicien Informatique/Webmaster
    Inscrit en
    Septembre 2006
    Messages
    3 650
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien Informatique/Webmaster
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 650
    Points : 15 771
    Points
    15 771
    Par défaut
    Pourquoi ne pas laisser DropBox toujours ouvert ?
    La rubrique Mac
    Les cours & tutoriels Mac
    Critiques de Livres Mac & iOS
    FAQ Mac & iOS

    ________________________________________________________________________
    QuickEvent : Prise de rendez-vous rapide pour iPhone/iPad et iPod Touch (AppStore)
    Mon Livre sur AppleScript : AppleScript: L'essentiel du langage et de ses applications

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Agent Immobilier
    Inscrit en
    Mars 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Agent Immobilier
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Parce que je me sers de mon MBP en itinérance et que chaque % de gagné c'est autant de minutes en plus pour bosser.

    De plus la base du script m'intéresse vraiment, surveiller les actions de dossier pour appeler une application si le dossier est modifié.

    Mais plus j'essais plus je m'arrache les cheveux^^

  4. #4
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    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 : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonsoir,
    Les actions de dossier standard prévues par Apple sont appelées seulement lors de certains événements comme l'ajout de fichiers, la suppression de fichiers, l'ouverture de la fenêtre du dossier, la fermeture de la fenêtre ou encore le déplacement de la fenêtre du dossier.

    Donc, comme tu veux lancer des scripts sur ajouts ou suppressions de fichiers, c'est parfait.
    Cependant, il n'y a pas d'action de dossier sur la modification des fichiers.
    Sur ce point, j'ai déjà cherché, mais cela semble plus difficile. (il faut sans doute passer par launchd avec un agent de type watchfolder path ...) bien plus compliqué qu'un AS de base !

    Par contre, si les actions pré-citées sont accessibles sur un dossier normal, je n'ai jamais testé sur un dossier Dropbox (j'ai une petite allergie à tout ce qui est "cloud" !... Allergie bénine, mais persistante ).
    D'après ton post, je comprends que tu as déjà testé avec un dossier Dropbox et que cela fonctionne : Parfait.

    Une fois dans le script de l'action, rien de plus facile que de lancer une application : tell application "Dropbox.app" to open Mon_Document (si dropBox est bien son nom exact !)

    Ta demande comporte en outre une petite difficulté supplémentaire : les actions doivent se déclencher sur le dossier et les sous dossiers.
    Pour cela, il faut utiliser une action de dossier capable de se générer elle-même: lorsque qu'un sous-dossier est ajouté dans le dossier, l'action de dossier crée une action de dossier pour ce sous dossier. Cette action nouvellement crée pointe sur elle-même.

    En résumé, ajouter, supprimer, propager l'action aux sous dossier, et ouvrir dropbox en fonction : OK !
    Réagir aux modifications des fichiers existants...Non !

    Pour tout ce qui touche aux actions de dossier, je te renvoi à l'article que j'ai écrit (merci à kOrt3x qui m' aidé pour la mise en page). L'article est sur ce même forum ici :
    il indique comment les mettre en oeuvre, et aussi comment les propager aux-sous dossiers.

    A toi de tester et d'adapter. si tu as des doutes, n'hésite pas à poser des questions sur ton script ou des points particuliers qui ne seraient pas clair dans l'article.
    Bon courage

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Agent Immobilier
    Inscrit en
    Mars 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Agent Immobilier
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta réponse, j'avais déjà consulté cet article qui m'a conduit à faire deux scripts :

    Le premier doit "surveiller le dossier" et lancer dropbox si quelque chose est ajouté ou supprimé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    on adding folder items to this_folder after receiving nouveauElements
    	launch Dropbox
    end adding folder items to
     
    on removing folder items from this_folder after losing lesElements
    	tell application Dropbox to run
    end removing folder items from
    j'ai nommé ce script SurveillanceDbox.scpt et il est rangé dans le Folder Action Script de la bilbio.

    En réalité rien ne marche ni lors de la suppression ni lors de l'ajout (j'ai essayé plusieurs manière de l'écrire pourtant)

    pourtant le script est bien attaché au dossier dropbox lorsque je regarde "configuration actions de dossier"

    et j'ai aussi fait un script tel que tu l'expliques dans ton article :
    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
     
    on adding folder items to Mon_Dossier after receiving Liste_Fichiers
     
    	set Script_sous_Dossier to "SurveillanceDbox.scpt"
     
    	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"
    		if not (exists file Mon_Script) then return
     
    		repeat with Un_Item in Liste_Fichiers
    			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)
    			end if
    		end repeat
    	end tell
    end adding folder items to
    Hors quand je copie / colle ou que je créé un dossier dans le dossier dropbox (donc quand je créé un sous-dossier dans le dossier parent dropbox) ca ne me met pas le script "SurveillanceDbox.scpt" en action de dossier sur ces nouveaux.

    Je devrais voir apparaître dans la colonne de gauche de "configuration actions de dossier" le(s) nouveau(x) dossier(s) de dropbox avec l'action "SurveillanceDbox.scpt" attachés à droite...

    Je suis une quiche j'ai l'impression^^

  6. #6
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    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 : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonjour,
    Pour le script ajout / suppression, qui ne fonctionne pas, c'est normal car tu n'utilises pas la bonne syntaxe pour lancer une application.
    Voici la syntaxe correcte (il y en a d'autres pour les puristes, mais...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tell application "Microsoft Word" to launch
    Note bien les guillemets de part et d'autre du nom de l'application. Son nom doit être celui qui apparaît au-dessus de l'icône du Doc de cette application.

    D'une manière générale, je te conseille vivement de faire tourner tes scripts dans l'éditeur, en mettant en commentaires les lignes "on adding folder item..." et "End adding..."
    Tu as juste alors a ajouter une ligne d'affectation de la variable this_folder et une autre pour la variable nouveauElements.

    Ainsi tu peux tester et débugger ton script avec toute la visibilité voulue. Tu peux ajouter des trace (display dialog) . En effet, comme indiqué dans l'article, Mac OS n'affiche pas les erreurs des script d'actions de dossier.

    Quant au second script, de mémoire, je pense que c'est le test (kind of un_Item) is "dossier" qui ne doit pas fonctionner.
    Il me semble que cela doit être "Dossier" (avec majuscule). Là encore, un debug en mode direct te donnera la réponse.

    Cordialement

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Agent Immobilier
    Inscrit en
    Mars 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Agent Immobilier
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Enfin, oui grâce aux guillemets ça marche XD

    Pour ce qui est de tester le script en interne, je comprends l'intérêt. J'ai donc refait le script de "propagation" d'une action de dossier aux sous-dossier :
    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
    -- 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 
     
    -- on adding folder items to Mon_Dossier after receiving Liste_Fichiers
     
    -- Sélection du dossier
    set Mon_Dossier to ((choose folder with prompt "Choisissez le dossier test :" without invisibles) ¬
    	as alias) as string
     
    -- Sélection des fichiers ajoutés
    set Liste_Fichiers to choose folder with prompt "selectionnez sous-dossier à ajouter" default location ¬
    	((Mon_Dossier) as alias) with multiple selections allowed
     
    -- 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 "SurveillanceDbox.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)
     
    -- Vérification que le script prédéfini existe. Sinon, on quitte le script !
    tell application "Finder"
    	if not (exists file Mon_Script) then return
     
    	-- Boucle sur chaque item ajouté = un ou plusieurs sous-dossiers)
    	repeat with Un_Item in Liste_Fichiers
    		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)
    		end if
    	end repeat -- fin de boucle sur les items ajoutés
    end tell
    -- end adding folder items to
    Comme ça, ça me demande de choisir un dossier (que j'ai nommé "Test", placé sur mon bureau, et auquel j'ai attaché le script "SurveillanceDbox.scpt". Ensuite ca me demande le sous-dossier à ajouter, je pensais qu'ainsi ca ajouterait le sous-dossier et ça me montrerais à quel moment le script est incapable d'attacher "SurveillanceDbox.scpt" au nouveau sous-dossier...

    Sauf que ça me sort
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error "Erreur dans System Events : Il est impossible de rendre alias \"Macintosh HD:Users:josselin:Desktop:Sous dossier test:\" en type specifier." number -1700 from alias "Macintosh HD:Users:josselin:Desktop:Sous dossier test:" to specifier

  8. #8
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    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 : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonjour Josselin,
    J'ai copié ce script en modifiant simplement le nom du script (de "SurveillanceDbox.scpt" à un autre nom d'action de dossier déjà fait).
    La première sélection demandée est bien ton dossier sur ton bureau "Test". OK

    La seconde sélection (ligne 12, 13 et 14) te demande le nom d'un dossier existant dans ce dossier par exemple "Sous_Dos".
    Je précise que ce Sous_Dos doit exister dans Test, avant le lancement du script, car il s'agit là de simuler ce que ferait l'action de dossier déclenchée par l'ajout de Sous_Dos dans Test.

    Le résultat, chez moi, est bien confirme aux prévisions, à savoir que Sous_Dos est bien lié à l'action de dossier.
    Je n'ai pas d'erreur.

    Comme ton erreur vient du system Event, elle provient des lignes 21,22 ou de la ligne 33. A mon avis de la 33.
    Pour le vérifier, tu met un display dialog "bonjour" en ligne 28 : si il s'affiche, cela confirme la ligne 33 (car le script est alors déjà passé sur 21,22 !).
    Relance le script avec les bons dossiers (test qui contient Sous_Dos). Tu choisis d'abord Test, puis Sous_Dos.
    De plus, vérifie bien que ton fichier SurveiianceDrop.scpt est bien dans le Folder Action Script de ta bibliothèque.

    Enfin, une fois que cette partie est débloquée, n'oublie pas de combiner les 2 scripts en un seul :
    - On Delete -> lancer dropbox
    - On adding -> Si element ajouté = dossier alors ajout de l'action, sinon lancement de Dropbox (et si dossier ajouté, souhaites tu aussi lancer Dropbox ?)

    A+

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Particulier
    Inscrit en
    Juillet 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Particulier
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2018
    Messages : 8
    Points : 8
    Points
    8
    Par défaut Presque mais je cafouille
    Citation Envoyé par PBELL Voir le message
    En résumé, ajouter, supprimer, propager l'action aux sous dossier, et ouvrir dropbox en fonction : OK !
    Salut PBELL !

    Alors ça fait deux jours que je m'arrache la tête sur ton script qui semble super (du moins pour ce que j'essaye de faire).

    Malheureusement, j'essaye de contourner sa limitation et mes connaissances ne me semblent pas suffisantes.

    Voici ton code auquel je n'ai quasiment rien changé (le but est de déclencher et :
    1/ une récurssion de ton script au sous-dossiers (il se réattribue lui-même en tant qu'action de sous-dossier, de sous-sous-dossier, etc
    2/ une récursion de l'attribution d'un deuxième script qui donne l'ordre de synchroniser les fichiers entre deux dropbox, une sur un macmini, l'autre sur un macbook

    Alors c'est p'tet pas joli à voir mais j'ai fait comme ça
    Un premier Action folder script (ton script adapté) nommé : "RECURS RSYNC MBMN.scpt" (appliqué aux dossiers du macbook)

    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
    45
    46
    47
    48
    49
    50
    -- 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 
     
    on adding folder items to thisfolder 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 "RECURS RSYNC MBMN.scpt"
    	set Script_sous_Dossier2 to "RSYNC macbook->mini.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)
     
    	-- Vérification que le script prédéfini existe. Sinon, on quitte le script !
    	tell application "Finder"
    		if not (exists file Mon_Script) then return
     
    		-- Boucle sur chaque item ajouté = un ou plusieurs sous-dossiers)
    		repeat with Un_Item in Liste_Fichiers
    			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)
    			end if
    		end repeat -- fin de boucle sur les items ajoutés
    	end tell
     
    	-- 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_Script2 to (Dossier_Scripts & Script_sous_Dossier2)
     
    	-- Vérification que le script prédéfini existe. Sinon, on quitte le script !
    	tell application "Finder"
    		if not (exists file Mon_Script2) then return
     
    		-- Boucle sur chaque item ajouté = un ou plusieurs sous-dossiers)
    		repeat with Un_Item in Liste_Fichiers
    			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_Script2 as string)
    			end if
    		end repeat -- fin de boucle sur les items ajoutés
    	end tell
    end adding folder items to
    il est donc accompagné d'un autre script pour action de dossier : "RSYNC macbook->mini.scpt"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    on adding folder items to this_folder after receiving added_items
    	do shell script "rsync -av  '/Volumes/raouldouglas-1/Dropbox/' '/Volumes/750 GIGAS/DROPBOX/Dropbox'"
    end adding folder items to
     
     
    on removing folder items from this_folder after losing lost_items
    	do shell script "rsync --recursive --delete --ignore-existing --existing --verbose  '/Volumes/raouldouglas-1/Dropbox/' '/Volumes/750 GIGAS/DROPBOX/Dropbox'"
    end removing folder items from
    Et j'ai deux autres script qui font la même chose mais en sens inverse, attribués sur les dossiers de la dropbox du macmini->macbook

    Bref, le but est de ne pas avoir à mettre manuellement les deux actions de dossiers sur chaque sous-dossier qui se réupload dans la box, mais que ça se fasse au fur et à mesure que je m'en sers.

    Alors des fois ça marche ( en tout cas au niveau du premier sous-dossier qui se réuploade), quand je vais dans l'application "configuration d'action de dossier", je vois bien le sous-dossier qui apparaît et les deux scripts qui lui sont affectés.

    Par contre, pour les sous-sous dossiers, sous-sous-sous-dossier, etc, c'est beaucoup plus laborieux. Des fois il arrive que ça fonctionne, des fois non.

    Je me demande si ce n'est pas un problème du fait que quand la box réuploade plusieurs sous-dossiers des uns dans les autres, le script doit se déclencher trop de fois en même temps et du coup ça n'arrive plus à suivre.

    Bref, j'espère avoir été clair.

    C'est dommage qu'il n'y ait pas tout simplement une commande dans les actions de dossier qui dise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    on adding folder items to this_folder AND EVERY SUBFOLDERS RECURSIVELY
    ou un truc du genre, ce serait beaucoup plus simple que d'avoir à attribuer les actions de script sur tous les sous dossiers. Il y en aurait une seul sur le dossier parent tout en haut, et ça détecterait les changements dans le dossier y compris dans les dossiers enfants.

    Bref, j'espère que j'ai été assez clair dans mon explication. Je ne sais pas si tu as une solution pour cette histoire de récursivité dans l'attribution d'action de dossiers aux sous-dossiers.

    En fait ce que j'aimerais faire c'est :

    Nom : image 2018-07-19 à 17.39.31.png
Affichages : 486
Taille : 7,4 Ko

    Quand je réupload "monfichier.txt", tous les dossiers a,b,c,d,e, se réuploadent en même temps, du coup j'aimerais qu'ils héritent tous des actions de dossier indiquées.

    J'ai bien vu que dans ton article tu a bien écrit :
    Ce script gère un seul niveau de sous‑dossier. Pour gérer plusieurs niveaux (sous-sous-dossiers…) il doit être adapté et faire appel à la récursivité, ce qui sort du cadre de cet article.
    Mais j'ai quand même voulu essayer de contourner le truc.

  10. #10
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    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 : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    ​Bonjour Raoul,
    Je commence par une remarque générale concernant une mise à jour pour les actions de dossier dans Applescript depuis 2014, date de mon précédent script.

    Sur les systèmes de versions récentes (au moins El Capitain), l'instruction "attach action to" n'est plus valide. Elle a été remplacée par une syntaxe plus cohérente avec d'autres fonction AS, c'est à dire l'utilisation de "make":
    Voici un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    set thisFolder to (choose folder with prompt "select folder")
    set thisScript to (choose file with prompt "Select script to attach")
    
    
    tell application "Finder" to set ScripName to name of thisScript
    set ScriptPath to POSIX path of thisScript
    
    
    tell application "System Events"
        set thisAction to (make new folder action at end of folder actions with properties {path:(POSIX path of thisFolder)})
        tell thisAction to  make new script at end of scripts with properties {name:ScripName, POSIX path:ScriptPath}
    end tell
    Je ne sais pas quelle version exacte de système a effectué ce remplacement entre Snow Leopard et El Capitain.
    Ceci étant, si tu arrive toujours à complier et exécuter l'action "attach action to", pas de souci !

    Quant à ta remarque sur l'ajout de multiple items dans un dossier, elle est correcte : le script peut être lancé plusieurs fois et les exécutions multiple se perturber.
    Il y a un décalage entre l'ajout des items dans le dossier et le déclenchement de l'action de dossier. Ce décalage génère ou non des regroupements. Par exemple, en ajoutant 3 items (fichiers ou dossiers) nommés "1", "2" et "3", il se peut qu'une action de dossier soit déclenchée pour les 3, ou bien 2 actions de dossiers, l'une avec "1" et "2", puis une seconde action de dossier pour gérer l'item "3". En pratique, toutes les combinaisons sont possibles, jusqu'à l'exécution de 3 scripts d'action, un pour chaque item individuellement.

    C'est inhérent au mécanisme de lancement des actions de dossier, plus précisément à la fréquence à laquelle celui-ci scrute les dossiers pour voir les ajouts.
    On ne peut rien y faire !
    Note aussi que si tu décides de remplacer les actions de dossier par un script lancé avec un "launchd", le problème sera identique, mais tu pourras régler facilement l'intervalle de temps entre 2 vérifications du dossier pour déterminer si il y a ajout. Cela peut éventuellement rendre le problème moins fréquent, mais cela ne peut l'éliminer: A un instant t, tu regardes ce qui vient d'être ajouté au dossier et à l'instant t+x tu regardes de nouveau. Si tu ajoutent plusieurs items, certains avant t+x, et d'autres après, tu auras bien des déclenchement multiple du script !

    Il faut peut être penser ton problème Dropbox/synchro/structure de dossiers autrement...?

    Cordialement

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Particulier
    Inscrit en
    Juillet 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Particulier
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2018
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Merci pour ta réponse PBELL.

    Effectivement, j'ai abandonné mon entreprise de mettre ces actions de dossier sur tous les fichiers de la box, il y en a bien trop.
    Au final, je me suis rabattu sur deux boutons avec de simples Rsync ;-)

    Mais les actions de dossier sont quand même bien pratiques, d'ailleurs j'ai repris ton script pour le tri de mon dossier téléchargement.

    J'y ai juste ajouté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    property FArchive : {"tar", "gz", "rar", "zip", "7z", "dmg"}
    property DArchive : "ARCHIVES"
    Mais il est super.

    Encore merci !

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Particulier
    Inscrit en
    Juillet 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Particulier
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2018
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Salut.
    Je reviens concernant ton script pour le dossier téléchargement.

    En fait je viens de m'apercevoir qu'il fonctionne mal chez moi pour les téléchargements qui fabriquent un .part.
    J'ai bien modifié dans ton script le "download" par "part", et les 9 caractères par 5 caractères, mais rien n'y fait. Il retire bien l'extension "part", mais me copie un fichier vide dans le dossier désigné, alors que la fin du téléchargement se fait toujours à l'extérieur du dossier de destination.

    À la fin, j'ai un fichier vide du nom du fichier téléchargé dans mon dossier de destination, et le fichier téléchargé avec le bon poids (et donc exécutable) à l'extérieur du dossier de destination.

    Voici le script :

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    -- Action de dossier sur le dossier Téléchargement :
    -- Transfère les fichiers vers des sous-dossiers par type
    -- une fois leur téléchargement terminé
     
    -- Les sous-dossiers regroupent les fichiers par groupes d'extensions
    -- Pour chaque groupe sont définis les types et le nom du sous-dossier
    property FImage : {"JPG", "jpg", "png", "TIFF", "ico", "ICO", "tif", "tiff", "TIF", "psd"}
    property DImage : "IMAGES"
     
    property FTexte : {"txt", "doc", "docx", "odt", "rtf", "pdf"}
    property DTexte : "TEXTES"
     
    property FVideo : {"dv", "DV", "mov", "MOV", "VOB", "vob", "divx", "mp4", "MP4", "mkv", "MKV", "avi", "AVI"}
    property DVideo : "VIDEOS"
     
    property FAudio : {"m4a", "M4A", "aif", "mp3", "aiff", "wav"}
    property DAudio : "MUSIQUES"
     
    property FArchives : {"tar", "gz", "rar", "zip", "7z", "dmg"}
    property DArchives : "ARCHIVES"
     
    -- Pour toutes les autres extensions (impossible de lister tous les types !)
    property DAutres : "AUTRES FORMATS"
     
    on adding folder items to Mon_Dossier after receiving Liste_Fichiers
    	tell application "Finder"
    		-- Définit une liste de tous les sous-dossiers possibles
    		set Dossiers_Ajout to {DImage, DTexte, DVideo, DAudio, DArchives, DAutres}
    		-- Boucle sur chaque fichier ajouté dans le dossier de téléchargement
    		repeat with Mon_Item in Liste_Fichiers
    			set Mon_Ext to name extension of Mon_Item
    			set Mon_Nom to name of Mon_Item
    			-- Safari télécharge parfois en créant un nom temporaire avec "part"
    			-- Exemple : photo.jpg.download
    			-- Cela déclenche l'action de dossier, mais Safari change ensuite le nom du fichier!!
    			-- Si Safari change avant que l'action de dossier ne démarre, cela crée une erreur
    			-- On commence donc par prendre le nom sans le ".download" s'il existe
    			-- On extrait l'extension pour attribution du dossier
    			if Mon_Ext is "part" then
    				-- On supprime le download (les neuf derniers caractères)
    				set Mon_Temp to text 1 thru ((length of Mon_Nom) - 5) of Mon_Nom
    				-- Recherche du premier "." en partant de la fin pour l'extension
    				set I to length of Mon_Temp
    				repeat while character I of Mon_Temp is not "."
    					set I to I - 1
    				end repeat
    				set Mon_Ext to text (I + 1) thru (length of Mon_Temp) of Mon_Temp
    				set Mon_Nom to text 1 thru I of Mon_Temp
    			end if
     
    			-- attente de fin de téléchargement (vérification que la taille ne change plus)
    			try
    				set Mon_Fichier to Mon_Item as alias
    				set OldSize to -1
    				repeat until (size of Mon_Fichier) = OldSize
    					set OldSize to (size of Mon_Fichier)
    					delay 0.5
    				end repeat
    			end try
    			-- On teste si l'ajout n'est pas justement l'un des sous-dossiers
    			-- Si c'est le cas, la boucle ne fait rien et passe à l'item suivant !
    			if Mon_Nom is not in Dossiers_Ajout then
    				-- Détermination du sous-dossier via l'extension
    				if Mon_Ext is in FImage then
    					set Sous_Dossier to DImage
    				else if Mon_Ext is in FTexte then
    					set Sous_Dossier to DTexte
    				else if Mon_Ext is in FVideo then
    					set Sous_Dossier to DVideo
    				else if Mon_Ext is in FAudio then
    					set Sous_Dossier to DAudio
    				else if Mon_Ext is in FArchives then
    					set Sous_Dossier to DArchives
    				else
    					set Sous_Dossier to DAutres
    				end if
     
    				-- Vérification existence du sous-dossier, création si nécessaire
    				if not (exists folder Sous_Dossier of Mon_Dossier) then
    					make new folder at Mon_Dossier with properties {name:Sous_Dossier}
    					-- attention, cet ajout génère encore un event add folder items !! -> d'où le premier test !
    				end if
     
    				-- Transfert du fichier vers le sous-dossier adéquat
    				move Mon_Item to folder Sous_Dossier of Mon_Dossier as alias
     
    			end if -- si l'item n'est pas un sous-dossier
    		end repeat -- fin de boucle sur chaque item ajouté
     
    	end tell
    end adding folder items to
    Merci d'avance.

  13. #13
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    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 : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonjour,
    Ce script est bien ancien et Safari a peut-être changé sa méthode depuis.

    Il peut y avoir aussi 2 raisons:
    1) le nom temporaire donné par Safari est peut être formaté autrement
    2) le téléchargement est particulièrement lent et il s'écoule plus d'une demi seconde avant la réception du paquet suivant

    Pour le 1), il faut tracer le nom et les valeurs déduites pour vérifier si la méthode fonctionne toujours.
    Mettre un "log" ou "display dialog" pour afficher Mon_Ext, Mon_Nom, avant est après la transformation.
    Ajuster le script si nécessaire.

    Pour le 2), le script détermine si Safari a fini de charger le fichier en mesurant sa taille toutes les 0,5 secondes. Si pendant ce temps, la taille n'a pas changée, le script en déduit que le chargement est terminé. Les symptômes que tu indiques semblent indiquer que le script n'attends pas la fin du téléchargement. Peut être ton serveur distant et/ou le réseau sont particulièrement lents. Il suffit alors d'augmenter ce temps en changeant la ligne "delay 0.5" avec "delay 1" voir "delay 2" ...ou plus !

    Cordialement

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Particulier
    Inscrit en
    Juillet 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Particulier
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2018
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Merci, je vais essayer de changer le delay pour voir si ça résoud le problème. Mais je trouve ça étrange, je suis en connexion fibré, ça ne devrait pas être si lent que ça ^_^'

    Et pour ce qui est de l'extension temporaire, je navique avec Firefox, et effectivement il ne fait pas des .download, mais des .part

    Mais j'ai bien changé le nom de l'extension dans le script et à priori ça fonctionne.

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Particulier
    Inscrit en
    Juillet 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Particulier
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2018
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Ah, je pense avoir compris ce qui pose problème.
    En fait quand je télécharge un fichier, Firefox créé deux fichiers

    -Un fichier .part (le fichier qui se télécharge et dont la taille augmente.

    Un fichier "vide" de zéro octet qui a le même nom que le fichier en . part, mais sans le . part (le nom définitif quoi)

    Le souci c'est que durant le téléchargement, la taille de ce fichier vide n'augmente pas, du coup ton script le détecte comme étant le fichier du téléchargement qui est terminé, et ton script continue et le déplace correctement dans le dossier correspondant. Du coup, j'ai mon fichier vide qui est bien dans le dossier, et mon fichier en . part qui continue à se télécharger à l'extérieur, jusqu'à ce qu'il ait fini, et à la fin Firefox le renomme sans le . part

    Mais du coup, comme ton script s'est déjà terminé à cause du fichier vide (qui était normalement censé être temporaire et écrasé par le fichier.part à la fin du téléchargement), le fichier final n'est pas redirigé vers le dossier.

    EDIT : J'ai trouvé !!!

    En fait j'ai juste rajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    and (size of Mon_Fichier)0
    Sur ta ligne de condition de la taille du fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    repeat until (size of Mon_Fichier) = OldSize and (size of Mon_Fichier)0
    					set OldSize to (size of Mon_Fichier)
    					delay 2
    				end repeat
    Et là ça marche bien puisqu'il ne tient plus compte dans le repeat des fichiers dont la taille est égale à 0

    Note : Le &#880 qui apparaît dans le code, c'est pour le symbole "différent de" ou "égal barré" ≠

Discussions similaires

  1. Réponses: 0
    Dernier message: 15/03/2010, 23h45
  2. Réponses: 11
    Dernier message: 25/05/2006, 11h42
  3. [GNU Pascal] Lancer une application en plein écran
    Par joleboss dans le forum Autres IDE
    Réponses: 13
    Dernier message: 20/05/2004, 12h57
  4. lancer une application au démarrage de WinXP
    Par Sph@x dans le forum Windows
    Réponses: 6
    Dernier message: 07/04/2004, 18h05
  5. Réponses: 2
    Dernier message: 05/12/2003, 11h37

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