simulador - apache ant download
Filtrar archivos en el lugar con Ant? (1)
Ver la tarea de replace :
<replace
dir="mydir"
includes="foo, bar, baz">
<replacefilter token="OLD" value="NEW" />
</replace>
o la tarea replaceregexp :
<replaceregexp
file="${src}/build.properties"
match="OldProperty=(.*)"
replace="NewProperty=/1"
byline="true"/>
Tengo un directorio de archivos para el que me gustaría realizar un filtrado de cadenas "in situ" utilizando Apache Ant (versión 1.7.1 en Linux).
Por ejemplo, supongamos que en el directorio mydir
tengo archivos foo
, bar
y baz
. Además, suponga que todas las apariciones de la expresión regular OLD([0-9])
deben cambiarse a NEW/1
, por ejemplo, OLD2
→ NEW2
. (Tenga en cuenta que la tarea de replace
Ant no funcionará porque no admite el filtrado de expresiones regulares).
Esta situación de prueba se puede crear con los siguientes comandos de Bash (ant se ejecutará en el directorio actual, es decir, el directorio principal de mydir
):
mkdir mydir
for FILE in foo bar baz ; do echo "A OLD1 B OLD2 C OLD3" > mydir/${FILE} ; done
Aquí está mi primer intento de hacer el filtrado con Ant:
<?xml version="1.0"?>
<project name="filter" default="filter">
<target name="filter">
<move todir="mydir">
<fileset dir="mydir"/>
<filterchain>
<tokenfilter>
<replaceregex pattern="OLD([0-9])" replace="NEW/1" flags="g"/>
</tokenfilter>
</filterchain>
</move>
</target>
</project>
La ejecución de este primer script Ant no tiene efecto en los archivos en mydir
. El parámetro de overwrite
es true
de forma predeterminada con la tarea move
Ant. Incluso jugué con la configuración de granularity
, pero eso no ayudó.
Aquí está mi segundo intento, que "funciona", pero es un poco molesto debido a la creación de un archivo temporal. Esta versión filtra el contenido correctamente moviendo el contenido a archivos con un sufijo filtered
, luego el contenido filtrado se "mueve hacia atrás" con los nombres de archivo originales:
<?xml version="1.0"?>
<project name="filter" default="filter">
<target name="filter">
<move todir="mydir">
<globmapper from="*" to="*.filtered"/>
<fileset dir="mydir"/>
<filterchain>
<tokenfilter>
<replaceregex pattern="OLD([0-9])" replace="NEW/1" flags="g"/>
</tokenfilter>
</filterchain>
</move>
<move todir="mydir">
<globmapper from="*.filtered" to="*"/>
<fileset dir="mydir"/>
</move>
</target>
</project>
¿Se puede hacer que el primer intento (sin archivos temporales) funcione?