2012-10-25 4 views
5

Voici deux façons d'utiliser glob à la liste récursive répertoires:Différence entre "**/* /" et "** /"?

Dir.glob("**/*/")

Dir.glob("**/")

La sortie semble être le même, au moins pour un petit sous-arbre. Y a-t-il une différence entre ces deux commandes qui me manquent?

Répondre

2

Le ** correspond à 0 ou plusieurs répertoires. En plaçant un * à la fin vous supprimer des répertoires dans la racine, essentiellement ce qui en fait 1 ou plus:

a = Dir.glob('/tmp/**/*/').sort  
b = Dir.glob('/tmp/**/').sort.size 
b.size => 19 
a.size => 18 
b - a => ["/tmp/"] 

Sans un chemin constant conduisant cependant, il ne ressemble pas à une différence de 0 matchs de longueur Aren pas intéressant et ne pas mettre dans les résultats.

0

Dans ce cas, il n'y en a pas. Mais, il y a des cas où ce type de distinction peut être important. Si les modèles étaient **/* et **/*/* pour correspondre récursivement aux fichiers plutôt qu'aux répertoires, le premier inclurait les fichiers dans le répertoire courant alors que le dernier ne ferait que lister les fichiers qui étaient au moins à un niveau du répertoire courant depuis le /*/ au milieu doit correspondre à quelque chose.