2011-04-28 11 views
7

Tengo un archivo que tiene rutas de archivos como "LibraryX/A/Stuff/FileY.txt", que estoy usando como includesfile en Ant build. Sin embargo, necesito eliminar la parte de la ruta "LibraryX/A/DURING" durante el proceso de copia: el archivo se copia de "LibraryX/A/Stuff/FileY.txt" y aterriza en "Stuff/FileY.txt". ". He analizado algunos regexpmappers pero no he tenido ningún éxito con ellos en absoluto. :/Cómo pelar una carpeta durante la copia Ant

El propósito de esto es que la carpeta de destino puede tener archivos personalizados en "Cosas/MoreStuff" sobrescrito, y quiero utilizar la sobrescritura = "false" para mantener el acceso a disco en mínimo y mantener los archivos personalizados intacto.

Ant:

<copy todir="C:/targetdir/" overwrite="false"> 
    <fileset dir="C:/sourcedir/"> 
     <includesfile name="C:/targetdir/includes.file" /> 
    </fileset> 
</copy> 

Includes.file:

LibraryX/A/Stuff/FileA.txt 
LibraryX/A/Stuff/FileB.txt 
LibraryX/A/Stuff/FileC.txt 
LibraryX/A/Stuff/FileY.txt 

sourcedir:

sourcedir/LibraryX/A/Stuff/FileA.txt 
sourcedir/LibraryX/A/Stuff/FileB.txt 
sourcedir/LibraryX/A/Stuff/FileC.txt 
sourcedir/LibraryX/A/Stuff/FileY.txt 

Target dir:

targetdir/Stuff/FileY.txt 

Ahora, todos los archivos en la materia -folder en sourcedir, deben terminar en la materia -folder en targetdir. ¿Pero cómo?

Bono: Si muevo los archivos de "targetdir/LibraryX/A/Stuff", que se sobreponen a todo en la carpeta "targetdir/Stuff", incluso con la sobreescritura = "falso". Presumiblemente porque son archivos más nuevos que los que están en la carpeta de Cosas actualmente.

Nota: pude, por supuesto, mover archivos de la costumbre de distancia desde el directorio de destino, copie el material una y luego mover los archivos personalizados espalda, sobrescribir los nuevos. Pero esto accede al disco bastante, ralentizando el proceso.

Respuesta

7

Comenzando con Ant v1.8.2 puede usar el cutdirsmapper para quitar algunos directorios principales de las rutas de archivos. Vea la parte inferior del mapper type docs.

<copy todir="C:/targetdir/" overwrite="false"> 
    <fileset dir="C:/sourcedir/"> 
     <includesfile name="C:/targetdir/includes.file" /> 
    </fileset> 
    <cutdirsmapper dirs="2"/> 
</copy> 

Bono: Se podría utilizar la tarea ant touch para que todos los archivos de targetdir más nuevo que todos los archivos de origen y por lo tanto evitar que se sobrescriba.

+0

Esto prácticamente resume lo que necesitaba: cutdirsmapper hace exactamente lo mismo y puedo usar el touch para las versiones anteriores de Ant. ¡Gracias! – crappish

+0

estoy usando ANT v1.8.2 aunque estoy obteniendo el error como 'copia no es compatible con el elemento anidado" cutdirsmapper " por favor me ayuden – picnic4u

Cuestiones relacionadas