Ich habe ein Verzeichnis von Dateien, für die ich "In-Place" String-Filterung mit Apache Ant (Version 1.7.1 unter Linux) machen möchte.Filtern von Dateien mit Ant?
Angenommen, dass im Verzeichnis mydir
Ich habe Dateien foo
, bar
und baz
. Angenommen, alle Vorkommen des regulären Ausdrucks OLD([0-9])
sollten in NEW\1
geändert werden, z. OLD2
→ NEW2
. (Beachten Sie, dass die replace
Ant-Task wird nicht funktionieren, weil es nicht für reguläre Ausdrücke Filterung unterstützt.)
Diese Testsituation kann mit den folgenden Bash-Befehle erstellt werden (ant wird im aktuellen Verzeichnis ausgeführt werden, das heißt mydir
‚s übergeordnetes Verzeichnis):
mkdir mydir
for FILE in foo bar baz ; do echo "A OLD1 B OLD2 C OLD3" > mydir/${FILE} ; done
Hier ist mein erster Versuch, die Filterung mit Ant zu tun:
<?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>
diesen ersten Ant-Skript läuft, hat keine Auswirkungen auf den Dateien in mydir
. Der Parameter overwrite
ist standardmäßig true
mit der Ant-Task move
. Ich habe sogar mit der granularity
Einstellung getüftelt, aber das hat nicht geholfen.
Hier ist mein zweiter Versuch, der "funktioniert", aber etwas nervig wegen der temporären Dateierstellung ist. Diese Version filtert den Inhalt richtig durch den Inhalt von Dateien mit einem filtered
Suffix bewegt, dann der gefilterte Inhalt wird „zurückgefahren“ mit Original-Dateinamen:
<?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>
Kann der erste Versuch (ohne temporäre Dateien) vorgenommen werden Arbeit?
+1, gut geschriebene Frage –