6 votes

Comment surveiller automatiquement les modifications de fichiers et exécuter une action personnalisée à l'intérieur de la coquille?

Par exemple, j'aimerais exécuter automatiquement YUI Compressor chaque fois que je modifie un fichier source JavaScript pour produire une version compressée.

Idéalement, le processus ne fonctionne pas en arrière-plan mais dans un shell dédié, afin que je puisse facilement terminer le processus à la fin de la journée.

Quelle serait la manière la plus propre et la plus flexible de surveiller des fichiers et/ou des répertoires spécifiques pour détecter les modifications de fichiers et exécuter une action personnalisée dans un shell?

2voto

Pro Backup Points 3456

Le $25 Codekit surveille les dossiers et fichiers pour détecter les changements et compresse/minifie/combine les fichiers JavaScript et CSS.

Je sais que ce n'est qu'une réponse partielle à votre question, car ce n'est pas un watcher générique, mais cela correspond à votre exemple :

chaque fois que j'édite un fichier source JavaScript pour obtenir une version compressée

1voto

Pro Backup Points 3456

Observer un fichier pour des changements peut être accompli avec un LaunchAgent. Par exemple, créez un fichier plist à ~/Library/LaunchAgents/watch.and.lol.plist et remplissez-le avec ce contenu :

    Label
    watch.and.lol
    ProgramArguments

        /Users/Shared/changeAction.sh
        -force

    WatchPaths

        /private/var/radmind/client/.radmindOnDemand

Assurez-vous maintenant que le fichier /private/var/radmind/client/.radmindOnDemand existe. Puis chargez le launchagent avec la commande $ launchctl load ~/Library/LaunchAgents/watch.and.lol.plist. Dès que le fichier ~/Library/LaunchAgents/watch.and.lol.plist n'existera plus, ce job du launchagent sera déchargé.

Écrivez maintenant un script shell qui surveille votre fichier pour des changements, comme :

chsum1=""

while [[ true ]]
do
    chsum2=`md5 /private/var/radmind/client/.radmindOnDemand`
    if [[ $chsum1 != $chsum2 ]] ; then           
        compile
        chsum1=`md5 /private/var/radmind/client/.radmindOnDemand`
    fi
    sleep 2
done

Remarque : ce script shell nécessite un travail supplémentaire pour être efficace. Actuellement, il vérifie toutes les 2 secondes (sleep 2). Il est préférable de terminer le script après l'exécution de la commande compile. Cela nécessite de stocker la sortie de la commande de hachage md5 pour qu'elle puisse survivre à la fin et au relancement de ce script shell.

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