2010-08-06 6 views
10

Comment puis-je copier le contenu de tous les sous-dossiers d'un dossier donné en utilisant Ant?Copier le contenu des sous-dossiers avec Ant

dire que j'ai une telle structure de dossiers

folder/ 
folder/sub1/1.txt 
folder/sub1/f1/1.txt 
folder/sub2/2.txt 
... 

Je ne sais pas les noms exacts des sous-dossiers. Et j'ai besoin de copier le contenu de chacun d'entre eux dans un dossier (en gardant la structure du contenu, c'est-à-dire en copiant tous les fichiers dans un répertoire en utilisant aplatir n'est pas une solution). Je dois obtenir

newfolder/1.txt 
newfolder/1/1.txt 
newfolder/2.txt 
... 

Est-ce que l'ensemble de fichiers permet de regrouper les sous-dossiers de cette manière? ** signifie zéro ou plusieurs répertoires, et l'utilisation de * en tant que nom de répertoire n'est pas autorisée, par exemple, <fileset dir="${dir}/*/" /> n'est pas acceptable.

Merci à l'avance, Iouri

Répondre

11
<copy toDir="newfolder"> 
    <fileset dir="folder"> 
    <include name="*/**"/> 
    <exclude name="*"/> 
    </fileset> 
    <regexpmapper from="^[^/]*/(.*)$$" to="\1" handledirsep="true"/> 
</copy> 

Vous ne devez spécifier handledirsep si vous avez l'intention jamais d'exécuter ce script dans Windows.

+0

Merci beaucoup, Alexander! J'ai légèrement modifié regexp, parce que dans votre variante, il a agi de la même manière que aplatir. Mais après avoir changé regexpmapper à , J'ai ce dont j'ai besoin. Pourriez-vous s'il vous plaît corriger mapper dans votre réponse? –

+0

@Yury. Je suppose que je n'ai pas testé une hiérarchie assez profonde. Parce que le paramètre 'to' est vraiment simple, j'ai seulement laissé 1 groupe regex, mais changé en' [^ /] * 'au début de l'expression. –