Tôi có một thư mục chứa các tệp mà tôi muốn thực hiện việc lọc chuỗi "tại chỗ" bằng cách sử dụng Apache Ant (phiên bản 1.7.1 trên Linux).Lọc tệp tại chỗ với kiến?
Ví dụ: giả sử rằng trong thư mục mydir
Tôi có các tệp foo
, bar
và baz
. Giả sử thêm rằng tất cả các lần xuất hiện của cụm từ thông dụng OLD([0-9])
phải được đổi thành NEW\1
, ví dụ: OLD2
→ NEW2
. (Lưu ý rằng tác vụ Ant replace
Ant sẽ không hoạt động vì nó không hỗ trợ lọc biểu thức chính quy.)
Tình huống thử này có thể được tạo bằng các lệnh Bash sau đây (ant sẽ được chạy trong thư mục hiện tại, tức là mydir
's thư mục cha):
mkdir mydir
for FILE in foo bar baz ; do echo "A OLD1 B OLD2 C OLD3" > mydir/${FILE} ; done
đây là nỗ lực đầu tiên của tôi để làm các việc lọc với 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>
Chạy script Ant đầu tiên này không ảnh hưởng đến các tập tin trong mydir
. Tham số overwrite
là true
theo mặc định với nhiệm vụ move
Ant. Tôi thậm chí còn nghịch ngợm với thiết lập granularity
, nhưng điều đó không giúp được gì.
Đây là nỗ lực thứ hai của tôi, "hoạt động", nhưng hơi khó chịu do việc tạo tệp tạm thời. Phiên bản này các bộ lọc nội dung đúng cách bằng cách di chuyển nội dung các tập tin với một hậu tố filtered
, sau đó nội dung được lọc là "lùi lại" với tên tệp gốc:
<?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>
những nỗ lực đầu tiên (không có tập tin tạm thời) có thể được thực hiện để công việc?
+1, cũng như các văn bản câu hỏi –