Developpez.com - Rubrique Mac

Le Club des Développeurs et IT Pro

Les actions de dossier avec AppleScript

Devenez extrêmement productif sous Mac

Le 2013-06-04 08:03:11, par PBELL, Membre éprouvé
Bonjour à tous,

Les actions de dossier sur Mac permettent de réaliser automatiquement des tâches variées qui deviennent vite indispensables.
Cependant, les créateurs de ces actions sont régulièrement confrontés à des problèmes, principalement du fait d'une connaissance partielle des mécanismes en jeu.

Pour répondre aux multiples demandes d'aide dans ce domaine, j'ai réalisé mémo pour ceux qui veulent écrire des actions de dossier en AppleScript.
Les nombreux exemples de scripts commentés devraient permettre d'utiliser toute la puissance des actions de dossier pour vos scripts.

Voici le lien vers cet article :http://mac.developpez.com/cours/actiondossierapplescript/

Et vous, avez-vous rencontré des problèmes sur des actions de dossiers ? Comment les avez-vous résolus ?

Bonne journée à tous.
  Discussion forum
3 commentaires
  • kOrt3x
    Modérateur
    Merci à toi pour cet article.
    Il est vrai que les actions de dossier sous Mac OS X sont méconnus et donc très peu utilisés, mais ils peuvent être très pratiques.

  • RyuAutodidacte
    Expert confirmé
    Bonjour PBELL,

    Merci pour cette article d'une grande aide et qui va m'enlever certaines épines du pieds

    J'espère pouvoir l'adapter pour du flux Indesign => PDF dont plusieurs Dossier IN (3) de réceptions de fichiers selon le type de PDF voulu avec redirection dans l'un des 3 dossiers Out

    Edit : concernant le "@" dans ton article pour les permissions des fichiers que l'on peut voir avec ls -l Fichier, voilà ce que j'ai trouvé :
    http://www.macpuissancedix.com/937.php
    Extrai : … Le résultat de la commande se trouve sur la dernière ligne de la figure 1. Le groupe de 9 caractères dont il a été question est précédé par un tiret, et terminé par un @ (qui indique qu'il y a des attributs étendus) ….

    et ceci aussi en complément :
    En faisant un test avec le ls -l je suis tombé avec un fichier vidéo dont il n' avait pas les attributs étendus, du coup je pense (donne moi ton avis),
    qu'il serait peut être judicieux de mettre le code sans prendre en compte l'@
    Code applescript :
    repeat until (LS_Debut = "-rwx") and not (PosArobase = "@") and not (LS_Fin = "------")
    deviendrait :
    Code applescript :
    repeat until (LS_Debut = "-rwx")  and not (LS_Fin = "------")

    à voir …

    je continue à travailler dessus car qq chose me titille dans le cas ou le script ne trouve pas le fichier provoquant une erreur "number 1",
    mais dans ce cas là on risque d'avoir une boucle infini.
    Et le problème pour l'instant de mon coté, je vois pas comment lui dire de sortir de la boucle avec un message au bout d'un certain temps

    PS : je suis reparti d'un code que tu as fais sur le forum
    En attendant j'ai fait cela en phase de tests (j'ai pris un fichier plus lourd, mais à la base se sera avec des fichiers InDesign to PDF) :
    Code applescript :
    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
    set A to POSIX file "/Users/UserName/Documents/Fichiers/Film/monfilm.mp4"  
    set Desti to "/Users/UserName/Desktop/Scripts/HOT FOLDER/Film HD_IN" 
    set B to POSIX file Desti 
      
    tell application "Finder" 
    	ignoring application responses 
    		duplicate A to B 
    	end ignoring 
    	--display dialog "Copie lancée" 
    end tell 
      
      
    activate 
    if CopieTerminee(A, Desti) then 
    	display dialog "copie terminée" 
    else 
    	display dialog "copie non terminée ou fichier non existant" 
    end if 
      
      
    on CopieTerminee(Source, Destination) -- retourne "true" quand la copie du fichier Source vers le directory Destination est terminée 
    	tell application "Finder" to set Nom_Source to name of file Source 
    	set Fichier to quoted form of (Destination & "/" & Nom_Source) 
    	set Check_Droit to "xxx" 
    	set Cpt to 0 
    	repeat until Check_Droit contains "-rwxrwxrwx" 
    		set Cpt to Cpt + 1 
    		--display dialog Cpt 
    		try 
    			set Check_Droit to do shell script "ls -l " & Fichier 
    		on error 
    			set Check_Droit to "xxx" 
    		end try 
    		if Cpt = 10 then exit repeat 
    	end repeat 
    	if Cpt = 10 then 
    		return false 
    	else 
    		return true 
    	end if 
    end CopieTerminee

    Edit 2 :
    l'autre version (PS : pour ma par je ne ferais pas de copie, mais je récupérerai le chemin des fichiers à traiter dans un fichier texte via la commande "sed")
    Code applescript :
    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
    set A to POSIX file "/Users/UserName/Documents/Fichiers/Film/monfilm.mp4" 
    set B to POSIX file "/Users/UserName/Desktop/Scripts/HOT FOLDER/Film HD_IN" 
    tell application "Finder" 
    	ignoring application responses 
    		duplicate A to B 
    	end ignoring 
    	--display dialog "Copie lancée" 
    end tell 
    activate 
    if CopieTerminee(A, B) then 
    	display dialog "copie terminée" 
    else 
    	display dialog "copie non terminée ou fichier non existant" 
    end if 
      
    on CopieTerminee(Source, Destination) -- retourne "true" quand la copie du fichier Source vers le directory Destination est terminée 
    	set Lsize to -1 
    	try 
    		tell application "Finder" to set Nom_Source to name of file Source 
    		log Nom_Source 
    		set FichierCopie to (Destination as string) & ":" & Nom_Source 
    		delay 0.1 
    		set X to 0 
    		repeat until Lsize = X 
    			set Lsize to X 
    			tell application "Finder" to set X to physical size of file FichierCopie 
    			delay 0.3 
    		end repeat 
    		return true 
    	on error 
    		return false 
    	end try 
    end CopieTerminee 
      
    --tell application "Finder" to set X to physical size of file POSIX file "/Users/kbelmehdi/Desktop/Scripts/HOT FOLDER/IN/668-669_FRG0919.indd"
  • clavier12AZQSWX
    Membre éclairé
    bonjour,

    je découvre l'apple script (on est en 2022).

    savez-vous s'il est encore possible en 2022 de parcourir un calendrier, d'analyser le titre d'un événement et de changer la couleur ?
    Avec les google app (app script), on peut le faire très simplement :
    j'aimerai bien savoir si ce script est "convertissable" en apple script ?

    Code JavaScript :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
      var calendar = CalendarApp.getCalendarById('mon_mien@group.calendar.google.com'); 
      var beginDate = new Date(1970, 0, 1);  
    var endDate = new Date(2500, 0, 1); 
      
    var events = calendar.getEvents(beginDate, endDate); 
      for (var i=0; i<events.length; i++) {  
            var event = events[i]; 
            var title = event.getTitle(); 
                if (/Submission:/.test(title)) { 
          event.setColor('3'); 
        } else if (/Test:/.test(title)) { 
          event.setColor('5'); 
        } else if (/Subscription:/.test(title)) { 
          event.setColor('9'); 
        } else {event.setColor('4'); //sinon couleur par défaut}  
      
         }

    le script est très simple :
    - on ouvre le calendrier par son id
    - on collecte les évenements dedans, bornées à 2 variables de date
    - on regarde le titre
    - si le titre contient tel mot, alors on attribut telle couleur à l'event

    ça fonctionne super bien dans Google Agenda/calendar, il doit forcément y avoir un moyen qu’Apple permette cela aussi, non ?

    merci de votre réponse, même si tardive.