Pour un besoin particulier de communication entre deux services situés sur deux machines distinctes, j’avais besoin de créer un fichier XML qui contienne l’arborescence d’un dossier situé sur un Mac. Idéalement il faudrait que ce fichier XML soit généré dynamiquement à chaque modification du contenu de mon dossier “à surveiller”.
Pour répondre à ce besoin, de manière basique, j’ai fait simple avec un petit script Shell basé sur la commande find
. Je suis parti sur fonction qui explore chaque dossier, de manière récursive, en ne renvoyant pas les dossiers masqués dont le nom commence par un point.
Il y a certainement moyen d’optimiser ça, les commentaires sont d’ailleurs là pour ça :
#!/bin/sh REP=/chemin/vers/le/repertoire IFS=$'\n' XML=/emplacement/du/fichier.xml function explore { LISTE=$(find $1 -type d ! -name ".*" ! -name "*.app" -mindepth 1 -maxdepth 1) if [ "1${LISTE}" != "1" ] then echo '<dossiers>' >> $XML for FILE in $LISTE do NAME=$(basename $FILE) echo '<name>'$NAME'</name>' >> $XML explore $FILE done echo '</dossiers>' >> $XML fi } [ -f $XML ] && rm $XML echo '<?xml version="1.0" encoding="utf-8" ?>' >> $XML echo '<racine>' >> $XML explore $REP echo '</racine>' >> $XML cat $XML
Pour le moment c’est loin d’être optimum car ce script est lancé périodiquement toutes les heures … on est donc loin du temps réel.
Si vous avez d’autres idées (un script en php avec du rewriting, ou l’utilisation d’une classe particulière), n’hésitez pas me faire vos propositions par le biais des commentaires ! Je complèterai cet article au fur et à mesure.