假设我有一个像这样的目录结构:
使用ant,我想重命名名为animals
的{{1}}下的所有子目录,现在命名为details
。结果就是这样:
我尝试过这样的事情:
new
但是得到这个错误:
<move tofile="new">
<path id="directories.to.rename">
<dirset dir="animals">
<include name="**/details"/>
</dirset>
</path>
</move>
答案 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-Contrib的for
任务和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>