2010-04-06 50 views
9

給定一個帶有未知目錄的zip文件,如何重命名或將該目錄移動到規範化路徑?使用ant,在不知道完整路徑的情況下重命名目錄?

<!-- Going to fetch some stuff --> 
<target name="get.remote"> 

    <!-- Get the zipfile --> 
    <get src="http://myhost.com/package.zip" 
     dest="package.zip"/> 

    <!-- Unzip the file --> 
    <unzip src="package.zip" 
      dest="./"/> 

    <!-- Now there is a package-3d28djh3 directory. The part after package- is 
     a hash and cannot be known ahead of time --> 

    <!-- Remove the zipfile --> 
    <delete file="package.zip"/> 

    <!-- Now we need to rename "package-3d28djh3" to "package". My best attempt 
     is below, but it just moves package-3d28djh3 into package instead of 
     renaming the directory. --> 

    <!-- Make a new home for the contents. --> 
    <mkdir dir="package" /> 

    <!-- Move the contents --> 
    <move todir="package/"> 
     <fileset dir="."> 
     <include name="package-*/*"/> 
     </fileset> 
    </move> 

</target> 

我不是一個螞蟻用戶,任何洞察力都會有所幫助。

謝謝了,-Matt

回答

12

這隻會只要dirset只返回1項工作。

<project name="Test rename" basedir="."> 

    <target name="rename"> 
    <path id="package_name"> 
     <dirset dir="."> 
     <include name="package-*"/> 
     </dirset> 
    </path> 
    <property name="pkg-name" refid="package_name" /> 
    <echo message="renaming ${pkg-name} to package" /> 
    <move file="${pkg-name}" tofile="package" /> 
    </target> 

</project> 
+0

搗亂工作的搗蛋。我有*不知道*邏輯流程應該在那裏......我們用dirset創建一個路徑,然後將它存儲在正確的位置,以便我們可以在移動時訪問它的字符串值。尼斯布萊恩'。 – mixonic 2010-04-06 19:34:14

+0

Drat,當然這不適用於宏,因爲它使用屬性。 @#$ @(ant。 – mixonic 2010-04-07 12:53:13

+3

我知道它已經2年了,而且這絕對有效,但我很想知道爲什麼這會起作用,爲什麼沒有更直觀的方法來簡單地重命名「fixed-prefix- *」目錄到「someConstantName」 – radai 2012-09-08 15:01:10

2

如果在包3d28djh3目錄中沒有子目錄(或任何一旦你提取它的叫法),可以使用

<move todir="package" flatten="true" /> 
    <fileset dir="."> 
    <include name="package-*/*"/> 
    </fileset> 
</move> 

否則,使用正則表達式映射器,用於移動任務擺脫包xxx目錄:

<move todir="package"> 
    <fileset dir="."> 
    <include name="package-*/*"/> 
    </fileset> 
    <mapper type="regexp" from="^package-.*/(.*)" to="\1"/> 
</move> 
+0

Howdy pitpod!該死的正則表達式幾乎就是它,但它不是遞歸的,只有目錄被複制而不是它們的內容我有一個目錄樹,可能有6層深度的移動,很明顯,螞蟻的「移動」不是簡單地映射到mv。Hell。 – mixonic 2010-04-06 19:28:19

相關問題