La tâche de pathconvert est probablement le meilleur moyen d'aller dans la plupart des cas. Mais cela crée un petit problème lorsque l'arborescence des répertoires est très grande et que l'on utilise la tâche echoproperties. Avec une très grande arborescence de répertoires, la chaîne générée par pathconvert peut être énorme. Ensuite, les echoproperties pulvérisent l'énorme chaîne, rendant la sortie plus difficile à travailler. J'utilise un macrodef sur Linux qui crée une propriété définie sur « 1 » s'il y a des fichiers dans le répertoire: cible
<macrodef name="chkDirContents" >
<attribute name="propertyName" />
<attribute name="dirPath" />
<attribute name="propertyFile" />
<sequential>
<exec executable="sh" dir="." failonerror="false" >
<arg value="-c" />
<arg value='fyles=`ls -1 @{dirPath} | head -1` ; if [ "$fyles" != "" ] ; then echo @{propertyName}=1 > @{propertyFile} ; fi' />
</exec>
</sequential>
</macrodef>
<target name="test" >
<tempfile destdir="." property="temp.file" deleteonexit="true" />
<chkDirContents propertyName="files.exist" dirPath="./target_dir" propertyFile="${temp.file}" />
<property file="${temp.file}" />
<echoproperties/>
</target>
Exécuter le « test » va générer la ligne echoproperties suivante s'il y a des fichiers dans le ./ target_dir/répertoire:
[echoproperties] files.exist=1
Qu'est-ce que "test" fait: Il génère un nom de fichier temporaire, $ {} temp.file, qui peut ensuite être utilisé comme fichier de propriétés. Il exécute ensuite le macrodef, qui appelle le shell pour vérifier le contenu du répertoire dirPath. S'il existe des fichiers ou des répertoires dans dirPath, il attribue à la propriété propertyName la valeur 1 dans le fichier temporaire. Il lit ensuite le fichier et définit la propriété donnée dans le fichier. Si le fichier est vide, aucune propriété n'est définie.
Notez que le fichier temporaire peut être réutilisé pour les appels ultérieurs du macrodef si vous le souhaitez. D'un autre côté, bien sûr, une fois qu'une propriété est définie, elle est immuable.
qui sonne parfait - je meurs d'envie de l'essayer. Si seulement j'avais posé la question il y a 3 ans, j'aurais économisé trop de temps. acclamations, Ian – ianmayo