0 votes

Copier un fichier dans un répertoire protégé à l'aide d'AppleScript

J'essaie de simuler la copie de fichiers du Finder, mais dans un répertoire protégé, en utilisant AppleScript. Le but est de copier un seul fichier mais de l'élever si nécessaire, comme Finder se comportera en le faisant manuellement.

Un exemple de test sans élévation :

set posixSrc to (POSIX file "/Users/darwin/Desktop/test.txt") as alias
set posixDst to (POSIX file "/Users/darwin/Desktop/test2.txt") as alias

tell application "Finder"
    duplicate posixSrc to posixDst
end tell

Un exemple de test avec élévation :

set posixSrc to (POSIX file "/Users/darwin/Desktop/test.txt") as alias
set posixDst to (POSIX file "/Applications/My Special App.app") as alias

tell application "Finder"
    duplicate posixSrc to posixDst
end tell

Malheureusement, entre POSIX et les alias, j'ai du mal à m'y retrouver. Quelques erreurs que je reçois :

error "Finder got an error: Handler can’t handle objects of this class." number -10010

error "Can’t make \"/Users/darwin/Desktop/test2.txt\" into type alias." number -1700 from "/Users/darwin/Desktop/test2.txt" to alias

error "Finder got an error: AppleEvent handler failed." number -10000 from file (file "Macintosh HD:Users:darwin:Desktop:test.txt")

error "Finder got an error: AppleEvent timed out." number -1712

Je les teste actuellement avec scriptÉditeur mais une solution en Terminal est également la bienvenue.

1voto

Zach Points 810

Je l'ai...

tell application "Finder"
    set posixSource to (POSIX file "/Users/darwin/Desktop/test.txt" as alias)
    set posixDest to (POSIX file "/Applications/My Special App.app/Contents/" as alias)
    duplicate file posixSource to folder posixDest with replacing
end tell

... et la réplique :

tell application "Finder" to duplicate file (POSIX file "/Users/darwin/Desktop/test.txt" as alias) to folder (POSIX file "/Applications/My Special App.app/Contents/" as alias) with replacing

Quelques distinctions importantes par rapport aux tentatives ratées :

  • Vous ne pouvez pas aliaser un fichier qui n'existe pas encore. Pour la destination, utilisez plutôt le dossier parent de la destination.
  • Vous ne pouvez pas copier dans la racine d'un paquet d'applications (par ex. My Special App.app ). Vous devez copier dans le My Special App.app/Contents à la place.
  • Accordez une attention particulière aux mots clés file y folder au fur et à mesure qu'ils sont fournis à l duplicate commandement.
  • Lorsqu'un problème survient, il peut y avoir un blocage scriptÉditeur . Enveloppez votre duplicate appeler ignoring application responses [...] end ignoring pour accélérer les tests qui entraînent des délais d'attente.
  • Lors de la conversion en une seule ligne, vous devrez utiliser le mot-clé to après le nom de l'application.

0 votes

J'étais en train de taper un commentaire pour soulever vos deuxième et troisième points quand j'ai reçu une alerte me disant qu'une réponse avait été postée. Le premier point est généralement vrai, mais les détails sont importants - ce n'est pas toujours cohérent.

0 votes

Merci @Mockman, j'ai supprimé la partie concernant la portée des variables. Faux-positif lors du test, bonne prise.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X