如何使用ant脚本在分布式系统中创建文件?

问题描述

| 我正在与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
。