2011-10-04 157 views
0

我需要Apache 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,但是符号链接可以改变,我不希望所有的其他文件是在蚂蚁<fileset>

+0

什么是您的操作系统? – FailedDev

+0

Linux,但更改为Ant(来自Make),因为我也想在Windows 7上构建。 –

回答

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任务遍历它们,然后调用一个目标,在该目标中可以根据需要随文件执行任何操作。

+0

感谢您的回答,我用它,它创建一个属性文件的属性为每个符号链接'file =/home/user/build/folder/file-0.0.3',但我不知道如何得到回成一个文件集?我真正需要的是一个文件夹中所有符号链接的'',所以我可以在另一个Ant任务中迭代它们。我对Ant不太熟悉 - 我能否将文件读回到''? –

+0

所以我假设你想遍历所有“/home/user/build/folder/file-0.0.3”对吗?你打算为每个文件调用什么?我的意思是哪个任务?执行例如或更具体的东西? – FailedDev

+0

你只需要符号链接或一切? – FailedDev