0 votes

AppleScript : Surveiller un dossier et notifier l'arrêt des modifications

J'ai un scanner qui fait des opérations par lots. Je veux avoir un script qui m'envoie une notification (un simple email fera l'affaire) que plus aucune image n'a été ajoutée à un dossier après une certaine limite de temps - disons 90 secondes.

Quelqu'un peut-il m'aider à définir la structure de base ? Cette machine est verrouillée sur OS X Lion pour le contexte.

1voto

user3439894 Points 52496

Sur MacOS il existe plusieurs façons intégrées de regarder a dossier et faire en sorte que quelque chose soit fait automatiquement lorsque le contenu de la dossier surveillé changements.

  • Le moyen le plus rapide et le plus simple peut être à utiliser Automator pour créer un Action des dossiers flux de travail . Toutefois, dans ce cas d'utilisation, je préfère la méthode suivante.
  • Il y a également Configuration des actions du dossier dans lequel on peut attacher un AppleScript script à un dossier surveillé et ou également le gérer et ou un Action des dossiers flux de travail créé par Automator . C'est sur ce point que cette réponse se concentrera pour créer la Action des dossiers .
  • Les moins conviviales, sans l'utilisation d'une utilitaire tiers est de créer manuellement une Agent de lancement et en utilisant launchctl sur Terminal pour le mettre en œuvre et le gérer, et ne sera pas couvert par le présent document.

Normalement, quand on regarde un dossier l'assigné action/script est déclenché en tant que contenu de la dossier surveillé change et il fait son travail immédiatement et c'est fini. Il ne se soucie pas de savoir si le Action des dossiers n'a pas été déclenché à nouveau pour ensuite faire autre chose. En tant que tel, cela a présenté un regard intéressant sur la façon d'envoyer par exemple un e-mail après, par exemple, 90 secondes à partir du moment où le dernier balayage a été effectué. document du lot de balayage actuel est ajouté à la dossier surveillé et ne font rien lorsque documents en sont retirés.

À cette fin, la solution présentée ici comporte quelques éléments de travail différents pour la mettre en place. Cependant, une fois qu'elle est mise en place, elle est en pilotage automatique par la suite...

  • AppleScript shell script déclenché par le AppleScript script attaché à la Action des dossiers .
  • Terminal pour créer le AppleScript shell script exécutable fichier .
  • TextEdit pour modifier le AppleScript shell script exécutable fichier .
  • Éditeur AppleScript pour créer le AppleScript script attribué à la Action des dossiers .
  • Configuration des actions du dossier une interface graphique application pour configurer et gérer le Action des dossiers au besoin.
  • Courrier pour gérer l'envoi de l'email.

AppleScript shell script exécutable fichier

  • Créer le AppleScript shell script exécutable fichier sur Terminal .

  • Sur Terminal exécutez ce qui suit commandement composé :

    f='scandone'; touch "$f"; open -e "$f"; chmod +x "$f"

            - Conseil : Copiez et collez le commandement composé en Terminal puis appuyez sur : enter

  • Ensuite, dans l'espace vide ouvert scandone document dans, par exemple TextEdit copier et coller le exemple AppleScript code montrée plus bas, dans le cadre de l'opération.

  • Ensuite, apportez les modifications appropriées à la valeur de chaque property en haut de l'écran script puis enregistrez et fermez la page scandone document .

  • Notez que, par défaut, le <strong>AppleScript </strong><em>shell script </em>est créé dans le <em>Racine </em>de son <strong>Accueil </strong><em>dossier </em>. Comme il ne sera pas nécessaire d'exécuter directement à partir de <strong>Terminal </strong>il n'est pas nécessaire qu'il se trouve à un endroit défini dans le cadre de l'accord de coopération. <code>PATH</code> transmis à la <em>coquille </em>. Sur <strong>OS X Lion </strong>J'ai créé un <em>dossier </em>nommé <code>bin</code> au sein de la <em>Racine </em>de mon <strong>Accueil </strong><em>dossier </em>et a déplacé le <em>script </em>là, même si ce n'est pas un <em>fichier binaire </em>.

AppleScript script à attacher à la Action des dossiers

  • Sur Éditeur AppleScript créer un nouveau document en ajoutant le exemple AppleScript code montré plus bas après le exemple AppleScript code utilisé pour le AppleScript shell script .

    • Réglage de '/path/to/scandone' à l'actuel Chemin d'accès POSIX de la AppleScript shell script exécutable fichier créé à partir des indications données plus haut.
  • Sauvegarder le AppleScript script comme, par exemple Watch Scanning.scpt sur ~/Library/Scripts/Folder Action Scripts notant que le ../Scripts/Folder Action Scripts dossier n'existe pas par défaut. S'il n'existe pas déjà lors d'une utilisation précédente, il suffit d'ouvrir le fichier Terminal et exécutez ce qui suit commande :

    mkdir -p -m 0700 "$HOME/Library/Scripts/Folder Action Scripts"

            - Conseil : Copiez et collez le commande en Terminal puis appuyez sur : enter

Configuration des actions du dossier

  • Ouvrir Configuration des actions du dossier en utilisant l'une des méthodes mentionnées dans le Notas: section ci-dessous, à partir de : Pour faire remonter Configuration des actions du dossier sur OS X Lion

  • Ajouter le dossier surveillé et AppleScript script en utilisant le [+] bouton de chaque côté de la Configuration des actions du dossier fenêtre . Ajout de la dossier surveillé du côté gauche, et le AppleScript script par exemple Watch Scanning.scpt du côté droit de la fenêtre .

  • Sur le Configuration des actions du dossier fenêtre si le [Activer l'action sur les dossiers case à cocher n'est pas coché, assurez-vous de le faire.

En supposant que Courrier est déjà configuré avec votre e-mail et fonctionne normalement, alors vous avez terminé et vous êtes prêt à commencer la numérisation. (Évidemment, faites d'abord quelques tests en ajoutant n'importe quel vieux compte fichier dans le dossier surveillé comme s'il avait été fait par le scanner).

Comment ça marche

Lorsqu'un fichier est ajouté à la dossier surveillé le site AppleScript script attaché à la dossier surveillé sur Configuration des actions du dossier exécute le AppleScript script qui, dans ce cas, génère le AppleScript shell script exécutable fichier puis cesse d'attendre que le Action des dossiers pour être déclenché à nouveau.

Le spawned AppleScript shell script exécutable fichier puis compte le nombre de fichiers dans le dossier surveillé , attend l'ex. 90 secondes et compte ensuite le nombre de fichiers dans le dossier surveillé à nouveau. Ensuite, si le compte précédent est égale à la compte actuel le site AppleScript shell script envoie un e-mail via Courrier l'interface graphique application et non le ligne de commande mail sinon le shell script se termine.

De toute évidence, chaque fois que le Action des dossiers est déclenché, il va engendrer une autre occurrence de l'élément AppleScript shell script Cependant, lors de mes tests, je n'ai pas vu ce problème. C'était également le moyen le plus simple auquel j'ai pensé pour atteindre l'objectif.

La chose à garder à l'esprit est que le temps total le site shell script attend entre la vérification de la nombre de fichiers doit évidemment être supérieure à la temps qu'il faut pour scanner le document et le sauvegarder dans le dossier surveillé et comprend également une quantité appropriée de secondes de tampon pour que la timing travaux.


AppleScript shell script exécutable fichier

Exemple AppleScript code :

#!/usr/bin/osascript

property waitTimeSeconds : 90
property watchedFolder : "/path/to/WatchedFolder"
property toName : "John Doe"
property toEmail : "johndoe@domain.com"
property |Subject| : "Finished Scanning"
property |Content| : "Finished Scanning"
property quitMail : false

set previousFileCount to countFilesInWatchedFolder()

delay waitTimeSeconds

set currentFileCount to countFilesInWatchedFolder()

if previousFileCount = currentFileCount then

    tell application "Mail"
        run
        set theMessage to ¬
            make new outgoing message with properties ¬
                {subject:|Subject|, content:|Content|}
        tell theMessage to ¬
            make new to recipient at end of ¬
                to recipients with properties ¬
                {name:toName, address:toEmail}
        send theMessage
    end tell

    if quitMail then
        delay waitTimeSeconds
        quit application "Mail"
    end if

end if

on countFilesInWatchedFolder()
    tell application "System Events" to ¬
        return count files of folder watchedFolder
end countFilesInWatchedFolder

AppleScript script à attacher à la Action des dossiers

Exemple AppleScript code :

on adding folder items to
    do shell script "'/path/to/scandone' &>/dev/null &"
end adding folder items to

on removing folder items from
    return
end removing folder items from

Notas:

En exemple AppleScript code montré ci-dessus, a été testé de manière approfondie dans scriptÉditeur ( Éditeur AppleScript sur OS X Lion ) et en tant que AppleScript shell script et Courrier sous MacOS Catalina avec Langue et région paramètres dans Préférences du système réglé sur Anglais (US) - Primaire et a fonctionné pour moi sans problème 1 .

  • 1 Assume les paramètres nécessaires et appropriés dans <strong>Préférences du système </strong>> <strong>Sécurité et confidentialité </strong>> <strong>Vie privée </strong>ont été fixés/réglés selon les besoins.

Comme le OS X Lion Le système sur lequel je l'ai testé n'est pas connecté à un réseau de télécommunications. réseau je n'ai pas pu envoyer le message sortant dans la base de données de l'entreprise. Courrier Cependant, les instructions de base fonctionnent de la même manière que dans le cas de l'application MacOS Catalina . C'est-à-dire sans envoyer un e-mail sur OS X Lion lorsque le contenu de la dossier surveillé changé, il a fait tout ce qui était programmé pour faire.

Pour faire remonter Configuration des actions du dossier sur OS X Lion ce n'est pas aussi facile que de faire des tests dans le cadre de l'enquête. MacOS Catalina . Sur MacOS Catalina , faire apparaître Spotlight et commencer à taper Configuration des actions du dossier permet de cliquer pour l'ouvrir. Ce n'est pas le cas dans OS X Lion . Sur OS X Lion J'utilise Terminal et a exécuté ce qui suit commande :

open -a 'Folder Actions Setup'

Sur OS X Lion elle est située à : /System/Library/CoreServices/Folder Actions Setup.app

Sur OS X Lion , Configuration des actions du dossier peut également être ouvert à partir de l script menu sur le barre de menu si oui, configurez dans Éditeur AppleScript > Préférences en vérifiant le [Afficher le menu script dans la barre de menu case à cocher puis de la script menu sur le barre de menu , Actions des dossiers > Configurer les actions du dossier ouvre Configuration des actions du dossier .

Sur OS X Lion le prédécesseur de Préférences du système > Sécurité et confidentialité > Vie privée > Accessibilité dans, par exemple MacOS Catalina c'est Préférences du système > Accès universel > [Permettre l'accès aux appareils fonctionnels . Dans mes essais, je n'ai pas eu besoin de le faire vérifier (YMMV).

Dans le exemple AppleScript code si property quitMail : false est réglé true elle le fera quitter Courrier après le même valeur de la valeur de waitTimeSeconds . Gardez à l'esprit que si le e-mail adresse utilisé pour cette Action des dossiers a normalement beaucoup de trafic et Courrier n'a pas déjà été ouvert, vous voudrez peut-être définir l'option valeur pour le delay commande dans le if quitMail then bloc manuellement et supérieure à la valeur pour waitTimeSeconds . Cela permet d'éviter une situation de concurrence entre réception du courrier et envoi de courrier si le premier se produit avant le second. Vous ne voulez évidemment pas Courrier a quitter avant le message a été envoyé si une grande quantité est entrante, cela ralentit la message sortant .


Note : Le <em>exemple </em><strong>AppleScript </strong><em>code </em>est juste cela et sans aucune inclusion <em>gestion des erreurs </em>ne contient pas d'autres <em>gestion des erreurs </em>comme il se doit. C'est à l'utilisateur qu'il incombe d'ajouter toute <em>traitement des erreurs </em>selon ce qui est approprié, nécessaire ou souhaité. Consultez le <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_control_statements.html#//apple_ref/doc/uid/TP40000983-CH6g-129232" rel="nofollow noreferrer"><strong>essayez </strong></a><em>déclaration </em>et <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_control_statements.html#//apple_ref/doc/uid/TP40000983-CH6g-129657" rel="nofollow noreferrer"><strong>erreur </strong></a><em>déclaration </em>dans le <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html" rel="nofollow noreferrer"><strong>Guide du langage AppleScript </strong></a>. Voir aussi, <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_error_xmpls.html#//apple_ref/doc/uid/TP40000983-CH221-SW1" rel="nofollow noreferrer"><strong>Travailler avec des erreurs </strong></a>. En outre, l'utilisation de la <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_cmds.html#//apple_ref/doc/uid/TP40000983-CH216-SW10" rel="nofollow noreferrer"><strong>retarder </strong></a><em>commande </em>peut être nécessaire entre les événements, le cas échéant, par ex. <code>delay 0.5</code> avec le <em>valeur </em>de la <em>retarder </em>définis de manière appropriée. .

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