问题描述
|
我正在与mqfte合作。将文件传输到目标位置后,我必须创建一个与源文件同名的空txt文件。如何使用ant脚本执行此操作?
场景:
Srcpath:\\ src \\ test.dat
目标路径:\\ dest \\ test.dat
从src路径中移动文件后,我需要使用ant脚本在src路径中创建一个空文件test.dat吗?如何才能做到这一点?
解决方法
在传输文件之前,您可以使用Touch任务在临时目录中创建与要传输的新空文件匹配的新空文件(重复使用相同的文件集)。传输完成后,您可以使用“移动”任务将空文件复制到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\"
(在正则表达式中,“ 4”指的是表达式中捕获的第一个组。组使用括号定义。)
因此,从src/somefile.txt
,我们将得到somefile.txt
作为映射器的输入文件,并将其转换为tmp/somefile.txt
。