Comment utiliser les modèles de dénomination Nant / Ant?


99

Je dois admettre que j'ai toujours oublié les subtilités syntaxiques des modèles de dénomination pour Nant (par exemple, ceux utilisés dans les ensembles de fichiers). Le truc double astérisque / astérisque simple semble être très oubliable dans mon esprit.

Quelqu'un peut-il fournir un guide définitif sur les modèles de dénomination?


3
J'ai lu la référence. Et relisez-le. Et relisez-le. Je pense simplement que son ensemble d'exemples est vraiment médiocre et que son message n'est pas clair.
berko

Peut-être pouvez-vous spécifier exactement ce que vous essayez d'atteindre et quelqu'un peut fournir une meilleure réponse?
Andy Whitfield

Réponses:


240

Les règles sont:

  • une seule étoile (*) correspond à zéro ou plusieurs caractères dans un nom de chemin
  • une étoile double (**) correspond à zéro ou plusieurs caractères à travers les niveaux de répertoire
  • un point d'interrogation (?) correspond exactement à un caractère dans un nom de chemin

Une autre façon d'y penser est que la double étoile (**) correspond à la barre oblique (/) mais pas à la simple étoile (*).

Disons que vous avez les fichiers:

  1. bar.txt
  2. src / bar.c
  3. src / baz.c
  4. src / test / bartest.c

Puis les motifs:

  • *.c             ne correspond à rien (il n'y a pas de fichiers .c dans le répertoire courant)
  • src/*.c     correspond à 2 et 3
  • */*.c         correspond à 2 et 3 (car * ne correspond qu'à un seul niveau)
  • **/*.c       correspond à 2, 3 et 4 (car ** correspond à n'importe quel nombre de niveaux)
  • bar.*         correspond à 1
  • **/bar.*   correspond à 1 et 2
  • **/bar*.* correspond à 1, 2 et 4
  • src/ba?.c correspond à 2 et 3    

5
Je pense que c'est une bien meilleure explication que la référence Nant. À votre santé!
berko

1
À quoi correspond src / * / **? Je m'attendrais à ce que ce soit 4, mais mon expérience avec maven semble indiquer que vous correspondez à tous les fichiers dans tous les dossiers dont vous avez besoin src / * / * / **
Matthew Buckett

1
ce qui **.ccorrespondrait?
chharvey

3
Je n'utilise plus Ant, donc je ne suis pas en mesure de répondre aux questions de suivi. Vous devriez poser une nouvelle question ou, mieux encore, trouver la réponse puis soumettre une modification à ma réponse.
benzado

1
@sitaktif Une façon d'y penser est que bar.txtc'est implicitement ./bar.txt( .signifie le répertoire courant). Donc , cette liste est vraiment ./bar.txt, ./src/bar.c, etc. , et l' ./on suppose.
benzado le

16

Voici quelques correspondances de motifs supplémentaires qui ne sont pas si évidentes dans la documentation. Testé en utilisant NAnt pour les fichiers d'exemple dans la réponse de benzado:

  • src**                      correspond à 2, 3 et 4
  • **.c                        correspond à 2, 3 et 4
  • **ar.*                    correspond à 1 et 2
  • **/bartest.c/**  correspond à 4
  • src/ba?.c/**        correspond à 2 et 3

2
petite note: avec fourmi (1.8.2) **. c ne remplace pas ** / *. c
nonsenz

4

Les doubles astérisques ( **) sont associés à la correspondance des noms de dossier, tandis que les symboles simples astérisque ( * = multi characters) ainsi que le point d'interrogation ( ? = single character) sont utilisés pour faire correspondre les noms de fichiers.


3

Consultez la référence Nant . Les modèles d'ensemble de fichiers sont:

«*» correspond à zéro ou plusieurs caractères, par exemple * .cs
«?» correspond à un caractère, par exemple? .cs

Et «**» correspond à une arborescence de répertoires, par exemple src / ** / *. Cs trouvera tous les fichiers cs dans n'importe quel sous-répertoire de src.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.