2011-10-04 156 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