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 :

Shell dans applescript


Sujet :

AppleScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2011
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 38
    Par défaut Shell dans applescript
    Bonjour

    Je cherche a optimiser ma command shell dans applescript.

    Voici mon script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	set Chemin to (votreChoix as text)
    		set S to quoted form of POSIX path of (Chemin)
    		do shell script ("cp -P " & quoted form of POSIX path of (Chemin) & "*.pdf  " & quoted form of POSIX path of (Chemin) & dossier_origine)
    		do shell script ("cp -p " & quoted form of POSIX path of (Chemin) & "*.PDF  " & quoted form of POSIX path of (Chemin) & dossier_origine)
    Le problème est que je dois faire 2 lignes pour presque la même chose.
    Et s'il n'y a pas de pdf mon script plante .

    Pouvez vous m'aidez à optimiser cela.

    Merci par avance

  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 Duffman,

    Le plus simple est de grouper la commande cp (copie) et la commande find (recherche), celle-ci utilisant le paramètre -iname qui indique que la recherche ne différentie pas les caractères majuscule/minuscule.

    Par exemple :
    Le dossier dans lequel on doit chercher les .pdf et .PDF (mais aussi les .Pdf,..) est : /Users/Moi/Desktop/Dossier_Source
    Le dossier dans lequel les fichiers doivent être copiés est /USers/Moi/Desktop/Dosser_Dest

    La commande shell est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /Users/Moi/Desktop/Dossier_Source -iname '*.pdf' -exec cp "{}" /USers/Moi/Desktop/Dosser_Dest \;
    Le tout à adapter avec ta variable Chemin et ton dossier origine qui semble être Chemin & dossier_Origine.
    Laisse bien les quoted form au cas où tes dossiers source et destination contiennent des caractères spéciaux.

    Pour être complet, et au cas où ton dossier ne contient aucun PDF, tu mets le "do shell script" and un bloc "try" pour éviter les erreurs.
    Enfin, une petite astuce : les caractères guillment (") et backslash "\" génèrent des erreurs lors de la compilation AppleScript, il faut passer via des ascii caractères.
    Voici le script ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    set chemin to "Users:imac27:Desktop:"
    set destination to "Users:imac27:Desktop:Copie_recue"
    set Guillemet to ASCII character 34
    set BackSlash to ASCII character 92
     
    set Shell_Commande to "find " & (quoted form of POSIX path of chemin) & "  -iname '*.pdf' -exec cp " & Guillemet & "{}" & Guillemet & " " & (quoted form of POSIX path of destination) & " " & BackSlash & ";"
    try
    	do shell script Shell_Commande
    end try
    Ne pas oublier les espaces là où il doit y en avoir !
    Cordialement

  3. #3
    Membre averti
    Inscrit en
    Octobre 2011
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 38
    Par défaut
    Merci beaucoup c'est exactement ce que je voulais faire .
    J'ai essayer de faire la même chose avec les photos avec cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    set Shell_Commande to "find " & (quoted form of POSIX path of Chemin) & "  ( -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.tiff' -o -iname '*.png' -o -iname '*.eps' -o -iname '*.psd' -o -iname '*.bmp') -exec mv " & Guillemet & "{}" & Guillemet & " " & (quoted form of POSIX path of Chemin & dossier_origine) & " " & BackSlash & ";"
    			try
    				do shell script Shell_Commande
    			end try
    Mais cela ne marche pas

  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 Dufmann,

    En principe, la syntaxe ci-dessous devrait fonctionner.
    Tu es très proche, mais les parenthèses doivent être "échappées":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /Users/Moi/Desktop/Dossier_Source \( -iname '*.jpeg' -or -iname '*.png' \) -exec cp "{}" /USers/Moi/Desktop/Dosser_Dest \;
    ……avec autant de -or - iname que nécessaire.
    Attention toutefois aux espaces devant est après les "\(" et "\)"

    Je souligne cependant que tu commences à perdre en lisibilité de ton code.
    Pourquoi ne pas faire une sélection dans AppleScript sur les fichiers de type Image et copier la liste ainsi obtenue en une fois ?
    Example avec une liste de "kind" pdf et image :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    set Liste_Type to {"Portable Document Format (PDF)", "Image JPEG", "Image JPEG 2000", "Image PNG (Portable Network Graphics)", "Image TIFF"}
    tell application "Finder"
    	set Dos to choose folder "Sélection du dossier parent"
    	set Dest to choose folder "Sélection du dossier destination"
    	set Liste_Item to every item of folder Dos whose kind is in Liste_Type
    	repeat with Mon_Fichier in Liste_Item
    		duplicate (Mon_Fichier as alias) to Dest
    	end repeat
    end tell
    Cordialement

  5. #5
    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 Duffmann,
    La nuit portant conseil, il y a encore plus simple pour la partie AppleScript :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    tell application "Finder"
    	set Dos to choose folder "Sélection du dossier source parent"
    	set Dest to choose folder "Sélection du dossier destination"
    	set Liste_Item to (every item of folder Dos whose kind contains "Image")
    	duplicate Liste_Item to Dest
    end tell
    C'est tout de même plus lisible que l'équivalent Shell ! Non ?
    Cordialement

Discussions similaires

  1. Afficher un shell dans une fenêtre wxWidget
    Par BlueCat dans le forum wxWidgets
    Réponses: 3
    Dernier message: 05/09/2006, 22h38
  2. utilisation des commandes shell dans un programme C
    Par rasgueados dans le forum Linux
    Réponses: 15
    Dernier message: 03/08/2006, 17h25
  3. Réponses: 2
    Dernier message: 09/06/2006, 10h06
  4. Réponses: 6
    Dernier message: 12/04/2006, 14h53
  5. commande shell dans un programme
    Par diefo dans le forum C
    Réponses: 3
    Dernier message: 15/08/2003, 13h37

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