Ant:重命名同名的子目录

时间:2012-05-09 01:41:21

标签: java ant rename

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

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

使用ant,我想重命名名为animals的{​​{1}}下的所有子目录,现在命名为details。结果就是这样:

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

我尝试过这样的事情:

new

但是得到这个错误:

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

2 个答案:

答案 0 :(得分:3)

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

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

move task docs末尾有一个类似的例子。)

您看到的错误是因为您已将移动任务(tofile)的单文件模式与多文件模式混合在一起。 由于dirset任务接受任何基于文件的资源集合,包括path,因此无需将move嵌套在dirset中。

答案 1 :(得分: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>