2012-10-25 51 views
5

Qui ci sono due modi per utilizzare glob elencare ricorsivamente directory:Differenza tra "**/* /" e "** /"?

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

Dir.glob("**/")

L'uscita sembra essere la stessa, almeno per un piccolo sotto-albero. C'è una differenza tra quei due comandi che mi mancano?

risposta

2

Il ** corrisponde a 0 o più directory. Inserendo un * alla fine di rimuovere le directory nella root, in sostanza, rendendo 1 o più è:

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

Senza un percorso costante che porta, però, non sembra che ci sia una differenza di 0 partite lunghezza aren Sono interessanti e non vengono messi nei risultati.

0

In tal caso no non c'è.

Ma, ci sono casi in cui questo tipo di distinzione può essere importante. Se gli schemi erano invece **/* e **/*/* per associare ricorsivamente i file anziché le directory, il primo includerebbe i file nella directory corrente mentre il secondo elencerebbe solo i file che erano almeno di un livello inferiore rispetto alla directory corrente dal /*/ nel mezzo deve corrispondere a qualcosa.