2009-11-06 34 views
87

He usado copydir para copiar un árbol de directorios pero está en desuso. Mi directorio contiene algunos subdirectorios, y algunos contienen archivos y otros contienen más subdirectorios.Cómo copiar un directorio usando Ant

¿Cómo puedo copiar todo el árbol?

+5

Parece que quiere hacer una copia recursiva. Y esa es la solución que dio Omnipresente. Más personas pueden encontrar esta pregunta si la palabra "recursivo" apareció en la pregunta. – Jason

Respuesta

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

creen que va a hacer lo que quiera ... (copia recursiva hecho)

+2

Aparentemente, el 'includes' no es necesario cuando lo quiere todo (consulte la respuesta del usuario * s1n *) – Abel

+30

Esto copia el contenido de {src.dir}, pero no el directorio real – cmcginty

+0

Copias no, pero su contenido. –

23

Sólo debería tener que especificar el directorio (sans la propiedad incluye):

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

Ver el manual para más detalles y ejemplos.

+12

@ s1n Este comando solo copia todos los contenidos de src_dir a ../new/dir y no al src_dir. ¿Cómo copiamos src_dir (directorio) a otra ubicación? –

1

En el ejemplo here, puede escribir un archivo Ant simple utilizando la tarea de copia.

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

Esto debería copiar todo dentro src_dir (excluyéndolo) a new/dir.

+6

esto solo copia el contenido del directorio. no los contenidos incluyendo el directamente. :( – ghostCoder

87

Copie los contenidos incluyendo el directorio.

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

esta debería ser la respuesta CORRECTA. La otra respuesta es para la pregunta "Cómo se copia el contenido de un directorio usando Ant". Hay una diferencia sutil. – cmcginty

+0

"esta debería ser la respuesta CORRECTA": Absolutamente, aunque la diferencia no es tan sutil cuando no puede cargar sus recursos con los nombres de ruta esperados. –

+1

no funciona para hormiga 1.8, parece que no pasó nada. – CCC

1

Un buen punto: ant solo copiará los subdirectorios si los archivos de origen son más nuevos que los archivos de destino. [1] En mi caso, los subdirectores no se copiaban (estoy usando verbose = "true"), ya que no había cambios y ya estaban en el destino. Puede usar "sobrescribir" para forzarlo, o tocar algunos de los archivos en sus subdirectorios de origen.

10

Copie los contenidos incluyendo el directorio.

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

Esta es la opción más sucinta. Consulte también http://ant.apache.org/manual/Types/fileset.html. – Jess

0

Este código debe copiar la carpeta así como su contenido. También utiliza la tarea de nombre base para evitar tener que realizar un análisis de ruta manual.

<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

finalmente he copiado utilizando el código

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

siguiente Esto copiará la carpeta src de dist para construir.

Espero que esto ayude a alguien.

1

Voy a agregar un patrón más genérico para copiar todas las subcarpetas.

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

Ver Patterns para detalles.

1

Utilicé etiquetas como se muestra en el siguiente fragmento de código en mi archivo build.xml para copiar archivos individuales de jarr en un directorio.

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

Otra tarea de hormiga es Copydir. La parte clave aquí es incluir el nombre del directorio que desea copiar después del directorio dest. Los subdirectorios y archivos se copiarán automáticamente.

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

Desde su enlace: ** Esta tarea ha quedado en desuso. Use la tarea Copiar en su lugar. ** – Jim

Cuestiones relacionadas