Cómo copiar un directorio usando Ant


99

Solía copydircopiar un árbol de directorios pero está en desuso. Mi directorio contiene algunos subdirectorios, y algunos de ellos contienen archivos y otros contienen más subdirectorios.

¿Cómo puedo copiar todo el árbol?


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

Respuestas:


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

cree que hará lo que quiera ... (copia recursiva hecha)


3
aparentemente, includesno es necesario cuando quieres todo (ver la respuesta del usuario s1n )
Abel

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

Las copias no lo hicieron, pero su contenido.
A-Live

Como eres la respuesta aceptada, puedes corregirla para que se convierta en la respuesta correcta (la respuesta de ery es correcta) ;-)
Christian Fries

Tengo entendido que la idea de SO es la curación colectiva, por lo que cualquiera puede editar la pregunta de otra persona (aunque se necesita mucho representante para omitir la revisión de la edición).
Andrew Spencer

117

Copie el contenido, incluido el directorio en sí.

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

Nota: $ {src.dir} es relativo a $ {src.dir.parent} y no es una ruta completa


12
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 sutil diferencia.
cmcginty

"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.
Jim Pivarski

1
no funciona para ant 1.8, parece que no pasó nada.
CCC

8
@CCC asegúrese de que $ {src.dir} sea relativo a $ {src.dir.parent}, y no una ruta completa
Mike Demenok

muy engañoso cómo x.parentse supone que NO SERÁ el parentde x... -_-
chip

25

Solo debería tener que especificar el directorio (sin la propiedad incluye):

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

Consulte el manual para obtener más detalles y ejemplos.


13
@ s1n Este comando solo copia todo el contenido de src_dir a ../new/dir y no src_dir. ¿Cómo copiamos src_dir (directorio) a otra ubicación?
Pipalayan Nayak


2

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


2

Usé incluir etiquetas como se muestra en el siguiente fragmento de código en mi archivo build.xml para copiar archivos jar individuales dentro de 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

A partir del ejemplo aquí , puede escribir un archivo Ant simple usando 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 el interior src_dir(excluyéndolo) a new/dir.


6
esto es simplemente copiar el contenido del directorio. no el contenido incluido el directamente. :(
ghostCoder

1

Estoy agregando un patrón más genérico para copiar todas las subcarpetas.

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

Consulte Patrones para obtener más detalles.


1

Otra tarea de hormigas 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>

Desde su enlace: esta tarea ha quedado obsoleta. En su lugar, utilice la tarea Copiar.
Jim

0

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

<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 copié usando el siguiente código

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

Esto copiará la carpeta src de dist a build.

Espero que esto ayude a alguien.


Sin embargo, literalmente dice que copiaría al revés: P
chip
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.