1

假设我有一个这样的目录结构:

  • 动物/狗/细节
  • 动物/猫/细节
  • 动物/青蛙/细节
  • 动物/马/细节

使用 ant,我想将 call 下的所有子目录重命名animalsdetailsnamed new。所以结果是这样的:

  • 动物/狗/新
  • 动物/猫/新
  • 动物/青蛙/新
  • 动物/马/新

我试过这样的事情:

    <move tofile="new">
        <path id="directories.to.rename">
            <dirset dir="animals">
                <include name="**/details"/>
            </dirset>
        </path>
    </move>

但是得到这个错误:

Cannot concatenate multiple files into a single file.
4

2 回答 2

3

您可以通过mapper执行您描述的重命名。例如:

<move todir="animals">
    <dirset dir="animals" includes="**/details" />
    <globmapper from="*/details" to="*/new"/>
</move>

move(任务文档末尾有一个类似的示例。)

您看到的错误是因为您将移动任务(tofile)的单文件模式与多文件模式混合在一起。由于任务接受任何基于文件dirset的资源集合,包括.pathmovedirset

于 2012-05-09T07:46:40.260 回答
1

使用Ant-Contribfor任务和propertyregex任务。

<target name="test">
  <for param="detailsDir">
    <dirset dir="animals">
      <include name="**/details"/>
    </dirset>
    <sequential>
      <propertyregex property="output.dir" input="@{detailsDir}" regexp="(.*)/details" replace="\1" />
      <move file="@{detailsDir}" toFile="${output.dir}/new" />
    </sequential>
  </for>
</target>
于 2012-05-09T01:48:14.940 回答