2011-06-21 16 views
6

Me gustaría copiar archivos y subdirectorios usando Ant desde un único subdirectorio sin copiar el resto de la estructura y el contenido del directorio. Por ejemplo, me gustaría copiar dir_3, sus archivos (file_1 a file_n) y subdirectorios (dir_4 y dir_5), pero no dir_1 ni dir_2. ¿Hay algún patrón que pueda usar para hacer esto?Ant - copia de archivos y subdirectorios de un solo subdirectorio en un árbol

temp 
    \--dir_1 
    \--dir_2 
     | 
     \--dir_3 
      | 
      \--dir_4 
      \--dir_5 
      \-- file_1 
      | 
      \--file_n 

Thanks.

Respuesta

16

no es tan difícil ...

<copy todir="${copy.dir}"> 
    <fileset dir="temp"> 
     <include name="**/dir3/**"/> 
    </fileset> 
</copy> 

Cuando utiliza la directiva include, solo incluirá los archivos que coincidan con el patrón que le proporcione. En este caso, estoy copiando solo aquellos archivos que tienen /dir3/ en algún lugar en su nombre de ruta completo. Esto incluye subdirectorios en dir3 y todos los archivos en dir3.

Usted puede usar la directiva exclude para anular las directivas include:

<copy todir="${copy.dir}"> 
    <fileset dir="temp"> 
     <include name="**/dir3/**"/> 
     <exclude name="**/dir3/*"/> 
    </fileset> 
</copy> 

Esto copia todos los subdirectorios y archivos en los subdirectorios, pero no los archivos bajo dir3 sí. El * coincide con todos los archivos en el directorio, mientras que ** coincide con todos los archivos en el árbol de directorios completo.

Observe que esto creará un directorio temp/dir2/dir3. Si quiero temp/dir3, tengo que configurar mi conjunto de archivos al directorio principal de dir3:

<copy todir="${copy.dir}"> 
    <fileset dir="temp/dir2"> 
     <include name="dir3/**"/> 
    </fileset> 
</copy> 

Hacer esto:

<copy todir="${copy.dir}"> 
    <fileset dir="temp/dir2/dir3"/> 
</copy> 

creará un directorio temp con todos los archivos directamente bajo dir3 directamente bajo temp . También habrá un directorio temp/dir4 y temp/dir5 que contiene todos los archivos (y árboles de directorios) debajo de esos directorios.

1
<copy todir="/some/path/foobar" verbose="true"> 
    <fileset dir="/some/path/temp/dir2" includes="**"/> 
</copy> 

sólo tiene que utilizar un conjunto de archivos a partir de directorio2 incluyendo todos los directorios y archivos por debajo ..
detallado = true para repetir todos los archivos copiados
puede ser que necesite utilizar sobreescritura = true también si el dir que es especificados por TODIR
atributo ya existe, de lo contrario los archivos existentes no se sobrescribirán con la tarea de copia

Cuestiones relacionadas