2010-11-19 12 views
5

J'ai utilisé la fourmi depuis près d'une décennie, mais de temps en temps, j'ai besoin de faire quelque chose au-delà de mon expérience ordinaire. Celui-ci manquait une réponse évidente (et les approches intuitives conduit à des impasses)Copier plusieurs répertoires (et contenus) en une fois

Problème:

Copie plusieurs sous-répertoires (et leur contenu) dans le répertoire « exemple » à nouveau répertoire « myInstance ». Pour clarifier, copiez certains, mais pas tous les sous-répertoires dans le répertoire source.

répertoire Source:

example/ 
    ignoreThisDirectory/ 
    ignoreThisOneAlso/ 
    lib 
    etc/ 
    webapps/ 

Tentative: Dead End Cette tentative a d'abord semblé fonctionner. Il a créé les sous-répertoires lib, etc, webapps. Cependant «copie» n'a pas copié leur contenu; il me restait des sous-répertoires vides.

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

réussie Mais verbeux En fin de compte, je devais copier chaque répertoire individuellement, qui semblent verbeux et non SECS:

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

merci à l'avance

Répondre

8

Vous pouvez spécifier plusieurs règles d'inclusion et d'exclusion dans un ensemble de fichiers. Si vous ne spécifiez pas de règle d'inclusion, la valeur par défaut est tout ce qui est inclus, à l'exception de tout ce qui est exclu au moins une fois par une règle d'exclusion.

Voici un exemple compris:

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

Notez le ** générique qui apportera dans l'arborescence complète dans chacun des trois « pointe » sous-répertoires spécifiés. Sinon, si vous voulez exclure spécifiquement quelques répertoires, mais copier sur tous les autres, vous pouvez omettre l'inclusion (et ainsi obtenir la valeur par défaut de comportement tout compris) et de fournir une liste des exclusions:

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

Vous pourriez encore bouillir l'exemple particulier que vous avez donné à un modèle d'exclusion:

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

J'utiliserais plutôt includes pour lister ce que vous voulez copier. – JasonMArcher