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?

Berko
la source
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    
benzado
la source
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
bougie d'allumage
la source
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.

Aditya Kumar Shrivastava
la source
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.

Andy Whitfield
la source