2 votes

Surveiller le contenu des dossiers avec launchd - y compris les sous-dossiers ?

Je souhaite créer un shell script qui s'exécute à chaque fois que le contenu d'un dossier particulier sur mon serveur est modifié. Cela semble assez facile à première vue, car launchd dispose d'une directive appelée WatchPaths qui déclenche votre script chaque fois que le contenu d'un dossier change.

TOUTEFOIS WatchPaths n'est pas déclenché par des changements dans les sous-dossiers. Le dossier que j'essaie de surveiller contient quelques centaines de Mo de petits fichiers web, imbriqués à plusieurs niveaux dans des sous-dossiers. Il y a beaucoup trop de dossiers pour essayer de les répertorier manuellement.

Existe-t-il d'autres sain d'esprit Comment y parvenir ?

4voto

slm Points 4018

WatchPaths ne semble pas pouvoir surveiller un sous-répertoire de manière récursive, donc le mieux que vous puissiez faire avec lui est de surveiller les activités d'un seul répertoire. Vous voudrez peut-être jeter un coup d'œil aux actions sur les dossiers, elles sont discutées en détail dans cet article de blog intitulé : Configurer les actions de dossier OS X pour savoir quand un fichier est ajouté également.

Une autre solution consiste à utiliser un outil CLI disponible dans Homebrew via la commande brew install fswatch commandement. fswatch est une implémentation multiplateforme qui fonctionne sur la plupart des versions de *NIX, y compris MacOS.

Le moniteur FSEvents, disponible uniquement sous OS X, n'a pas d'équivalent connu. et s'adapte très bien au nombre de fichiers observés. observés.

Exemple

Ici, j'ai créé un sous-répertoire appelé ~/somedir . J'ai ensuite invoqué `fswatch dans ce répertoire :

$ mkdir ~/somedir
$ fswatch /some/dir

Si nous commençons à ajouter des fichiers et des sous-répertoires fswatch le notifiera :

$ touch ~/somedir/afile
fwatch msg>> /Users/joeuser/somedir/afile

$ mkdir ~/somedir/anotherdir
fswatch msg>> /Users/joeuser/somedir/anotherdir

$ touch ~/somedir/anotherdir/afile
fswatch msg>> /Users/joeuser/somedir/anotherdir/afile

Ce qui précède peut être adapté pour être utilisé dans un script shell qui peut effectuer toutes les autres actions que vous souhaitez lorsque des changements sont détectés dans l'arborescence du répertoire que vous avez créé. fswatch est surveillée.

Autres exemples

Pour agir sur l'activité du système de fichiers, vous pouvez utiliser l'un de ces deux modèles :

$ fswatch -0 path | while read -d "" event \
  do \
    // do something with ${event}
  done

Ou encore ceci :

$ fswatch -o path | xargs -n1 -I{} program

Références

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