Mon CV

Un fichier XML qui retrace l’arborescence d’un dossier : quelle est la meilleure approche ?

9 juillet 2013

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.

Posted in Apple et Macintosh, Unix et LinuxTags: