我正在使用mqfte。我必须在传输到目标后创建一个与源文件同名的空txt文件。怎么用ant脚本呢?
情景:
Srcpath:\ src \ test.dat destpath:\ dest \ test.dat
从src路径移动文件后,我需要使用ant脚本在src路径中创建一个空文件test.dat吗?怎么办呢?
答案 0 :(得分:1)
在传输文件之前,您可以使用Touch任务创建与您将要传输的文件集(重用相同的文件集)相匹配的新空文件。传输完成后,您可以使用Move任务将空文件复制到src目录中。您可以在Move任务中使用overwrite =“false”来确保src目录中剩余的文件不会被替换(例如,如果您希望确保只有成功传输的空文件)。
这是一个例子。
<project default="test">
<target name="test">
<touch>
<fileset dir="src">
<include name="test*"/>
</fileset>
<mapper type="regexp" from="(.*)" to="tmp/\1"/>
</touch>
<move todir="dest">
<fileset dir="src">
<include name="test*"/>
<!-- simulate file not transferred -->
<exclude name="test.doc"/>
</fileset>
<globmapper from="test.*" to="result_*.txt"/>
</move>
<move todir="src" overwrite="false">
<fileset dir="tmp"/>
</move>
</target>
</project>
第一步代表您的转移。一个文件(test.doc)没有移出src目录(模拟传输失败)。您可以测试是否在src目录中创建包含某些内容的文件。目标完成后,test.doc仍应具有其原始内容。其他文件应为空。
回答您关于正则表达式映射器的问题:
<mapper type="regexp" from="(.*)" to="tmp/\1"/>
这会将整个传入的文件名捕获到一个组中......
from="(.*)"
并将“tmp /”添加到该捕获的组...
to="tmp/\1"
(在正则表达式\1
中引用表达式中第一个捕获的组。使用括号定义组。)
因此,从src/somefile.txt
开始,我们会将somefile.txt
作为输入文件提供给映射器,我们将其转换为tmp/somefile.txt
。