2010-04-06 17 views
9

Dato un file zip con una directory sconosciuta, come posso rinominare o spostare quella directory in un percorso normalizzato?Utilizzando ant, rinomina una directory senza conoscere il percorso completo?

<!-- 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> 

Non sono molto un utente di formica, qualsiasi intuizione sarebbe utile.

Grazie molto, -Matt

risposta

12

Questo funziona solo fino a quando il dirset restituisce solo 1 punto.

<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

Holy Crap Mamboking che ha funzionato. Non ho * idea * di quale flusso logico si suppone ci sia ... creiamo un percorso con dirset, quindi lo memorizziamo in modo corretto in modo da poter accedere al valore di stringa in movimento? Bello andare. – mixonic

+0

Drat, e ovviamente questo non funzionerà in una macro perché usa proprietà. @ # $ @ (ant – mixonic

+3

so che sono passati 2 anni, e funziona sicuramente, ma mi piacerebbe sapere perché questo funziona e perché non esiste un approccio più intuitivo per rinominare semplicemente una directory da "prefisso fisso- *" a "someConstantName" – radai

2

Se non ci sono le sottodirectory all'interno della directory del pacchetto-3d28djh3 (o quello che viene chiamato una volta è stato estratto di esso) è possibile utilizzare

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

In caso contrario, utilizzare il mapper espressione regolare per l'attività mossa e sbarazzarsi della directory package-xxx:

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

Howdy pitpod! Accidenti a quella regex è quasi.Non è ricorsiva, però, solo le directory vengono copiate e non il loro contenuto.Ho un albero di directory di 6 livelli in profondità per spostarsi Ovviamente, la "mossa" della formica non è semplicemente mappato a MV inferno. – mixonic

Problemi correlati