Mam katalog plików, dla których chciałbym wykonać filtrowanie ciągów "w miejscu" przy użyciu Apache Ant (wersja 1.7.1 w systemie Linux).Filtrowanie plików w miejscu za pomocą mrówki?
Załóżmy na przykład, że w katalogu mydir
mam pliki foo
, bar
i baz
. Ponadto przypuśćmy, że wszystkie wystąpienia wyrażenia regularnego OLD([0-9])
powinny zostać zmienione na NEW\1
, np. OLD2
→ NEW2
. (Zauważ, że zadanie an Ant replace
nie będzie działało, ponieważ nie obsługuje filtrowania wyrażeń regularnych.)
Ta sytuacja testowa może zostać utworzona za pomocą następujących komend Bash (ant zostanie uruchomione w bieżącym katalogu, tzn. mydir
katalog nadrzędny):
mkdir mydir
for FILE in foo bar baz ; do echo "A OLD1 B OLD2 C OLD3" > mydir/${FILE} ; done
Oto moja pierwsza próba zrobienia filtrowanie z 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>
Uruchomienie tego pierwszego Ant skrypt nie ma wpływu na pliki w mydir
. Parametr overwrite
jest domyślnie ustawiony na true
przy pomocy zadania Ant z numerem move
. Nawet bawiłem się ustawieniem granularity
, ale to nie pomogło.
Oto moja druga próba, która "działa", ale jest nieco irytująca z powodu tymczasowego tworzenia plików. Wersja ta filtruje zawartość odpowiednio przesuwając zawartość do plików z filtered
sufiksu, następnie filtrowana zawartość jest „wrócił” z oryginalnymi nazwami:
<?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>
Czy pierwsza próba (bez plików tymczasowych) należy wprowadzić do praca?
+1, dobrze pisemne pytanie –