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.