我有一個文件目錄,我想使用Apache Ant(Linux上的版本1.7.1)進行「就地」字符串過濾。用Ant過濾文件?
例如,假設在目錄mydir
中,我有文件foo
,bar
和baz
。進一步假設正則表達式OLD([0-9])
的所有出現應該改變爲NEW\1
,例如, OLD2
→ NEW2
。 (請注意,replace
Ant任務將無法工作,因爲它不支持正則表達式過濾。)
這個測試的情況可以用下面的命令猛砸創建(螞蟻會在當前目錄下運行,即mydir
的父目錄):
mkdir mydir
for FILE in foo bar baz ; do echo "A OLD1 B OLD2 C OLD3" > mydir/${FILE} ; done
這是我第一次嘗試做過濾用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>
運行此第一Ant腳本在mydir
上的文件沒有任何影響。默認情況下overwrite
參數爲true
,並且使用move
Ant任務。我甚至撥弄granularity
設置,但這並沒有幫助。
這是我的第二次嘗試,它「有效」,但由於臨時文件創建而有點煩人。該版本由內容到文件與filtered
後綴移動正確過濾內容,然後經過過濾的內容爲「遷回」與原文件名:
<?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>
能在第一次嘗試(不包括臨時文件)是由工作?
+1,寫得很好的問題 – 2009-04-22 21:20:48