2015-02-24 3 views
3

Étant donné un répertoire de fichiers source comme ceci:Comment puis-je faire correspondre des fichiers avec un espace dans le motif dans Ant?

tester$ ls -l src 
-rw-r--r-- 1 tester staff 0 24 Feb 11:28 File 1.txt 
-rw-r--r-- 1 tester staff 0 24 Feb 11:28 File 2.txt 
-rw-r--r-- 1 tester staff 0 24 Feb 11:28 File 3.txt 
-rw-r--r-- 1 tester staff 0 24 Feb 11:30 FileFalse 1.txt 
-rw-r--r-- 1 tester staff 0 24 Feb 11:30 FileFalse 2.txt 
-rw-r--r-- 1 tester staff 0 24 Feb 11:30 FileFalse 3.txt 

Je pourrais essayer de les copier vers un autre emplacement en utilisant un fileset:

<project name="test" default="copy"> 
    <target name="copy"> 
    <mkdir dir="build"/> 
    <copy todir="build"> 
     <fileset dir="src" includes="File *.txt"/> 
    </copy> 
    </target> 
</project> 

Mais include= traite l'espace (et la virgule) comme séparateur, donc cela est traité comme incluant "Fichier" et "* .txt" - donc il copie réellement tous les fichiers. Les docs ne mentionnent pas comment vous pourriez échapper au personnage si vous vouliez utiliser le caractère littéral dans un pattern, et en lisant la source, il semble qu'ils n'aient pas du tout mis de mécanisme d'échappement.

Nous avons eu cela comme un vrai problème dans notre construction, mais nous ne faisions que correspondre à un fichier, donc comme une solution de contournement je viens d'utiliser <fileset file="..."/>. En général, cependant, le nombre de fichiers peut être important ou vous ne souhaitez pas nécessairement mettre à jour la version à chaque fois que les fichiers changent. Quelle est la méthode appropriée?

Répondre

5

Utilisez un fileset avec imbriqué include:

<fileset dir="src"> 
    <include name="File *.txt"/> 
</fileset> 

L'argument name-include est un modèle unique si les espaces ne sont pas traités comme des séparateurs.