J'ai un répertoire de fichiers pour lesquels j'aimerais faire un filtrage de chaînes «sur place» en utilisant Apache Ant (version 1.7.1 sous Linux).Filtrer les fichiers en place avec la fourmi?
Par exemple, supposons que dans le répertoire mydir
j'ai des fichiers foo
, bar
et baz
. Supposons en outre que toutes les occurrences de l'expression régulière OLD([0-9])
doivent être remplacées par NEW\1
, par ex. OLD2
→ NEW2
. (Notez que la replace
tâche Ant ne fonctionnera pas, car il ne supporte pas le filtrage d'expression régulière.)
Cette situation de test peut être créé avec les commandes Bash suivantes (ant sera exécuté dans le répertoire courant, soit mydir
« s répertoire parent):
mkdir mydir
for FILE in foo bar baz ; do echo "A OLD1 B OLD2 C OLD3" > mydir/${FILE} ; done
Voici ma première tentative de faire le filtrage avec 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>
l'exécution de ce premier script Ant n'a pas d'effet sur les fichiers mydir
. Le paramètre overwrite
est true
par défaut avec la tâche Ant move
. J'ai même joué avec le réglage granularity
, mais cela n'a pas aidé.
Voici ma deuxième tentative, qui "fonctionne", mais qui est légèrement gênante à cause de la création de fichiers temporaires. Cette version filtre le contenu correctement en déplaçant le contenu des fichiers avec un suffixe filtered
, le contenu filtré est « déplacé en arrière » avec des noms originaux:
<?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>
la première tentative peut (sans fichiers temporaires) soient présentés travail?
+1, question bien écrit –