Apache Ant - 选择所有符号链接

时间:2011-10-04 16:34:02

标签: ant

我需要Apache Ant中的符号链接选择器。

核心可以使用following selectors

有人建议我写一个<scriptselector>只选择目录下的符号链接文件吗?或者其他任何方式?

原因:

folder
|-- file-0.0.1
|-- file-0.0.2
|-- file-0.0.3
`-- file --> file-0.0.3

我只想获得file符号链接的文件。在这种情况下file-0.0.3,但符号链接可以更改,我不希望所有其他文件都在Ant <fileset>

1 个答案:

答案 0 :(得分:1)

请看一下:

http://ant.apache.org/manual/Tasks/symlink.html

我现在没有可以测试的linux机器,但我猜想有这样的东西:

<symlink action="record" linkfilename="my.links">
 <fileset dir="${my.folder}" includes="*"/>
</symlink>

您应该能够将符号链接记录到文件中,然后根据需要处理文件。例如,您可以使用“符号链接”文件创建一个列表,并迭代它以执行您想要的操作。

编辑:

对于此解决方案,您需要安装ant-contrib。只需将ant-contrib-1.0b3.jar解压缩到您的ant / lib目录即可。然后使用以下build.xml文件:

<project name="test" default="build">
  <!--Needed for antcontrib-->
  <taskdef resource="net/sf/antcontrib/antcontrib.properties"/>
  <target name="build">
  <property name="my.dir" value="/home/stefanos"/>
  <exec executable="bash" outputproperty="symlinks" dir="${my.dir}">
     <arg value="-c"/>
     <arg value="\ls -1 | xargs -l readlink"/>
  </exec>

<foreach list="${symlinks}" delimiter="${line.separator}" param="link" target="process.link"/>    

</target>

<target name="process.link">
   <!--Do whatever you want with the file targeted by the symlink-->
   <echo message="Processing link : ${link}"/>
</target>
</project>

技巧是linux命令,它返回符号链接中的所有目标文件。然后,您只需使用foreach任务迭代它们,然后调用一个目标,在该目标中,您可以使用文件执行任何操作。