2010-11-19 17 views
5

Ho usato la formica per quasi un decennio, ma ogni tanto ho bisogno di fare qualcosa al di là della mia esperienza ordinaria. Questo mancava una risposta ovvia (e gli approcci intuitivi ha portato a vicoli ciechi)copia di più directory (e contenuti) in un solo scatto

problema:

Copia diverse sottodirectory (ei loro contenuti) nella directory "esempio" per nuovi "myInstance" directory. Per chiarire, copia alcune ma non tutte le sottodirectory nella directory sorgente.

directory Fonte:

example/ 
    ignoreThisDirectory/ 
    ignoreThisOneAlso/ 
    lib 
    etc/ 
    webapps/ 

Tentativo: Dead End Questo tentativo in un primo momento sembrava funzionare. Ha creato le subdirectory lib, etc, webapps. Tuttavia "copia" non copiava il loro contenuto; Ero rimasto con sottodirectory vuote.

<copy todir="myInstance" > 
    <dirset dir="example" includes="lib etc webapps"/>  
</copy>  

successo, ma dettagliato Alla fine, ho dovuto copiare ogni cartella singolarmente, che sembrano verbose e non-DRY:

<copy todir="myInstance/etc"> 
    <fileset dir="example/etc"/> 
    </copy>  
    <copy todir="myInstance/lib"> 
    <fileset dir="example/lib" /> 
    </copy>  
    <copy todir="myInstance/webapps"> 
    <fileset dir="example/webapps" /> 
    </copy>  

grazie in anticipo

risposta

8

È possibile specificare più regole di inclusione ed esclusione in un set di file. Se non si specifica una regola di inclusione, il valore predefinito è tutto è incluso, tranne tutto ciò che è escluso almeno una volta da una regola di esclusione.

Ecco un esempio inclusiva:

<property name="src.dir" value="example" /> 
<property name="dest.dir" value="myInstance" /> 

<copy todir="${dest.dir}"> 
    <fileset dir="${src.dir}"> 
     <include name="lib/**" /> 
     <include name="etc/**" /> 
     <include name="webapps/**" /> 
    </fileset> 
</copy> 

Nota la ** jolly che porterà nella struttura di directory completo nell'ambito di ciascuno dei tre 'all'avanguardia' sotto-directory specificate. In alternativa, se si desidera escludere specificamente alcune directory, ma copiare su tutti gli altri, si potrebbe omettere l'inserimento (e quindi ottenere il comportamento all-inclusive default) e fornire un elenco di esclusioni:

<copy todir="${dest.dir}"> 
    <fileset dir="${src.dir}"> 
     <exclude name="ignoreThisDir*/" /> 
     <exclude name="ignoreThisOne*/" /> 
    </fileset> 
</copy> 

Si potrebbe ulteriormente fai bollire l'esempio particolare che hai dato ad un modello di esclusione:

<exclude name="ignore*/" /> 
+0

Vorrei invece usare include per elencare ciò che vuoi copiare. – JasonMArcher

Problemi correlati