2011-04-28 238 views
7

期間如何帶中的一個文件夾,我有一個具有文件路徑,如「LibraryX/A /東西/ FileY.txt」,我現在把它用作includesfile在Ant構建它的文件。但是,我需要的是在複製過程中刪除「LibraryX/A /」路徑的一部分:文件會從「LibraryX/A /東西/ FileY.txt」複製和土地成「東西/ FileY.txt 」。我已經看過很少的正則表達式,但根本沒有取得任何成功。 :/螞蟻副本

這樣做的目的是,目標文件夾可以覆蓋「Stuff/MoreStuff」中的自定義文件,並且我想使用overwrite =「false」來保持磁盤訪問最小並保留自定義文件完整。

螞蟻:

<copy todir="C:/targetdir/" overwrite="false"> 
    <fileset dir="C:/sourcedir/"> 
     <includesfile name="C:/targetdir/includes.file" /> 
    </fileset> 
</copy> 

Includes.file:

LibraryX/A/Stuff/FileA.txt 
LibraryX/A/Stuff/FileB.txt 
LibraryX/A/Stuff/FileC.txt 
LibraryX/A/Stuff/FileY.txt 

Sourcedir:

sourcedir/LibraryX/A/Stuff/FileA.txt 
sourcedir/LibraryX/A/Stuff/FileB.txt 
sourcedir/LibraryX/A/Stuff/FileC.txt 
sourcedir/LibraryX/A/Stuff/FileY.txt 

目標目錄:

targetdir/Stuff/FileY.txt 

現在,所有在sourcedir東西 -folder文件,應該結束到東西 -folder在TARGETDIR。但是如何?

獎勵:如果我將文件從「TARGETDIR/LibraryX/A /東西」之舉,他們將在「TARGETDIR /資料」文件夾中覆蓋了一切,甚至與覆蓋=「假」。大概是因爲它們比當前的Stuff文件夾中的文件更新。

注:我當然可以,將自定義文件從目標目錄中了,在複製的東西,然後將自定義文件後面,覆蓋新的。但是這樣訪問磁盤相當多,減緩了這個過程。

回答

7

用Ant v1.8.2的開始,你可以使用cutdirsmapper從文件路徑中剝離導致目錄的一些數字。見mapper type docs的最底部。

<copy todir="C:/targetdir/" overwrite="false"> 
    <fileset dir="C:/sourcedir/"> 
     <includesfile name="C:/targetdir/includes.file" /> 
    </fileset> 
    <cutdirsmapper dirs="2"/> 
</copy> 

獎勵:您可以使用touch ant任務,使所有文件在新TARGETDIR比所有的源文件,因此防止它們被覆蓋。

+0

這幾乎總結我需要的東西:cutdirsmapper不完全的事情,我可以使用較舊版本的螞蟻接觸。謝謝! – crappish 2011-05-02 10:52:57

+0

我使用ANT v1.8.2的eventhough I M得到的錯誤一樣 '拷貝不支持嵌套「cutdirsmapper」 element' 請幫助我出去 – picnic4u 2012-03-08 05:20:52