Convertir un conjunto de archivos Ant en múltiples args de aplicación
arguments fileset (1)
Tengo algunos archivos:
dir/foo.txt
dir/bar.txt
dir/foobar.txt
En una tarea de apply
Ant, quiero pasar la lista de archivos como argumentos:
<target name="atask">
<apply executable="${cmd}" parallel="false" verbose="true">
<arg value="-in"/>
<srcfile/>
<arg value="dir/foo.txt"/>
<arg value="dir/bar.txt"/>
<arg value="dir/foobar.txt"/>
<fileset dir="${list.dir}" includes="*.list"/>
</apply>
</target>
Esto funciona bien, pero ¿qué pasa si quiero elegir la lista de archivos de forma dinámica, utilizando un conjunto de archivos:
<fileset dir="dir" includes="*.txt"/>
¿Cómo puedo convertir este conjunto de archivos en elementos arg
, uno por archivo? Algo como:
<arg>
<fileset dir="dir" includes="*.txt"/>
</arg>
en lugar de
<arg value="dir/foo.txt"/>
<arg value="dir/bar.txt"/>
<arg value="dir/foobar.txt"/>
(Este ejemplo no funciona porque arg no admite el conjunto de archivos )
Aquí hay un ejemplo que ilustra el uso de la tarea pathconvert .
La ruta convertida se pasa al ejecutable usando <arg line />
.
Esto no asume espacios en las rutas de tus archivos *.txt
.
<target name="atask">
<fileset dir="dir" id="myTxts">
<include name="*.txt" />
</fileset>
<pathconvert property="cmdTxts" refid="myTxts" pathsep=" " />
<apply executable="${cmd}" parallel="false" verbose="true">
<arg value="-in" />
<srcfile />
<arg line="${cmdTxts}" />
<fileset dir="${list.dir}" includes="*.list" />
</apply>
</target>
Si pudiera encontrar espacios, debería hacerlo: como se muestra arriba, pero cambie (con suerte, qué líneas):
<pathconvert property="cmdTxts" refid="myTxts" pathsep="'' ''" />
y
<arg line="''${cmdTxts}''"/>