web-dev-qa-db-fra.com

Comment copier un répertoire en utilisant Ant

J'ai utilisé copydir pour copier une arborescence de répertoires, mais celle-ci est obsolète. Mon répertoire contient des sous-répertoires, dont certains contiennent des fichiers et d'autres, plus de sous-répertoires.

Comment puis-je copier l'arbre entier?

94
<copy todir="${dest.dir}" >  
    <fileset dir="${src.dir}" includes="**"/>  
</copy> 

crois que cela fera ce que vous voulez ... (copie récursive faite)

108
Omnipresent

Copier le contenu, y compris le répertoire lui-même.

<copy todir="${dest.dir}" >  
    <fileset dir="${src.dir.parent}">  
        <include name="${src.dir}/**"/>
    </fileset>
</copy>
103
ery

Vous devriez seulement avoir à spécifier le répertoire (sans la propriété includes):

<copy todir="../new/dir">
    <fileset dir="src_dir"/>
</copy>

Voir le manuel pour plus de détails et d’exemples.

25
s1n

Copier le contenu, y compris le répertoire lui-même.

<copy todir="${dest.dir}" >  
  <fileset dir="${src.dir.parent}" includes="${src.dir}/**"/>
</copy>
14
cmcginty

J'ai utilisé des balises include comme indiqué dans l'extrait de code ci-dessous dans mon fichier build.xml pour copier des fichiers jar individuels dans un répertoire.

<target name="devInstall" depends="generateXsl" description="testing">
<copy flatten="true" todir="${test}/WEB-INF/lib" overwrite="${overwrite}">
                <fileset refid="buildJars"/>
                <fileset dir="lib">
                    <include name="commons-collections-*.jar"/>
                    <include name="commons-io-*.jar"/>              
                    <include name="kodo/*.jar"/>
                    <include name="mail*.jar"/>    
                    <include name="activation*.jar"/>               
                    <include name="guava*.jar"/>
                    <include name="jna*.jar"/>                          
                </fileset>          
            </copy>
</target>
2
Raman B

J'ajoute un modèle plus générique pour copier tous les sous-dossiers.

<copy todir="${dest.dir}" >  
  <fileset dir="${src.dir}" includes="**/*"/>
</copy>

Voir Patterns pour plus de détails.

1
sartoris

Une autre tâche de fourmi est Copydir . La partie clé ici consiste à inclure le nom du répertoire que vous souhaitez copier après le répertoire dest. Les sous-répertoires et les fichiers seront automatiquement copiés.

<target name="-post-jar">
    <copydir src="config" dest="${dist.dir}/config/"/>
</target>
1
Andrei

À partir de l'exemple ici , vous pouvez écrire un fichier Ant simple à l'aide de la tâche de copie.

<project name="MyProject" default="copy" basedir=".">
    <target name="copy">
        <copy todir="./new/dir">
           <fileset dir="src_dir"/>
        </copy>
    </target>
</project>

Cela devrait copier tout ce qui se trouve à l'intérieur de src_dir (à l'exception de celui-ci) dans new/dir.

1
NawaMan

Un détail: ant ne copiera les sous-répertoires que si les fichiers source sont plus récents que les fichiers de destination. [1] Dans mon cas, les sous-répertoires n'étaient pas copiés (j'utilise verbose = "true"), car il n'y avait aucun changement et ils étaient déjà dans la destination. Vous pouvez utiliser "écraser" pour le forcer, ou toucher certains des fichiers de vos sous-répertoires sources.

1
Jess

J'ai finalement copié en utilisant le code suivant

<copy todir="${root.dir}/dist/src">  
                <fileset dir="${root.dir}/build/src" includes="**"/>  
            </copy>

Cela copiera le dossier src de dist à compiler.

J'espère que ça aide quelqu'un.

0
Dilip Rajkumar

Ce code doit copier le dossier ainsi que son contenu. Il utilise également la tâche basename pour éviter de devoir analyser manuellement les chemins.

<project name="Build" default="doCopy">
  <property name="source.dir" value="SourceDirPathGoesHere"/>
  <property name="dest.dir" value="DestinationDirPathGoesHere"/>
  <target name="doCopy">
    <basename property="source.dir.base.name" file="${source.dir}"/>
    <copy todir="${dest.dir}">
      <fileset dir="${source.dir}/.." includes="${source.dir.base.name}/**"/>
    </copy>
  </target>
</project>
0
user506069