Existe-t-il un moyen simple d'exécuter automatiquement une commande (Terminal) chaque fois qu'un fichier est modifié dans un dossier spécifique?
Cela devrait être possible via la ligne de commande, ou une application intégrée au système, pas d'applications tierces.
Des idées?
macos
terminal
command-line
Louis B.
la source
la source
Réponses:
Enregistrez une liste de propriétés comme celle-ci sous
~/Library/LaunchAgents/test.plist
:L'agent peut être chargé avec
launchctl load ~/Library/LaunchAgents/test.plist
ou en se déconnectant puis en se reconnectant. L'application des modifications nécessite le déchargement et le chargement de la liste.Tilde expansion (
~/
) fonctionne par défaut dans WatchPaths. EnableGlobbing ajoute une extension générique et tilde pour ProgramArguments, mais cela n'affecte pas Program ou WatchPaths.Si un fichier surveillé est modifié dans les dix secondes suivant la dernière invocation, un message comme celui-ci est ajouté à system.log:
Une façon de se débarrasser des messages est d'ajouter quelque chose comme
sleep 10
à la fin des scripts. Définir ThrottleInterval sur 10 n'aide pas.Les changements dans les sous-dossiers des dossiers surveillés ne sont pas détectés.
Voir
man launchd
etman launchd.plist
pour plus d'informations.la source
entr (1) est un utilitaire pour exécuter des commandes lorsque les fichiers changent. Il lit une liste de fichiers sur STDIN et utilise kqueue (2) pour éviter l'interrogation.
Exemple:
la source
Vous pouvez utiliser des actions de dossier, qui vous permettent d'exécuter des scripts (Automator) chaque fois que le contenu d'un dossier change. Autant que je sache, Automator dispose d'un modèle qui vous permet de créer facilement une nouvelle action de dossier et de la joindre au dossier souhaité. Et en ajoutant une action "Run Shell Script", vous devriez juste obtenir l'effet souhaité.
la source
Les actions sur les dossiers conviennent parfaitement au déclenchement lorsqu'un fichier est ajouté ou modifié.
Cependant, si votre définition de modifié inclut la suppression d'un fichier, les actions du dossier OSX ne détectent pas si un fichier a été supprimé.
Pour répondre à la question:
Téléchargez les dépendances FileWatcher ici: https://github.com/eonist/swift-utils
Familiarisez-vous avec l'exécution de swift dans la ligne de commande: http://krakendev.io/blog/scripting-in-swift
Utilisez ce code pour regarder un dossier.
Code:
la source
Automator dispose d'un type de flux de travail appelé "Action sur le dossier" qui s'exécute automatiquement lorsqu'un élément est ajouté à un dossier. Créez-en un, puis utilisez l'action «Exécuter le script shell».
la source
Vous voudrez peut-être essayer quelque chose comme ceci:
la source
ls -l
intercepter les modifications de fichiers.