2012-10-25 35 views
5

Oto dwa sposoby korzystania glob rekursywnie listy katalogów:Różnica między "**/* /" i "** /"?

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

Dir.glob("**/")

Wyjście wydaje się być taka sama, przynajmniej dla małego poddrzewie. Czy istnieje różnica między tymi dwoma komendami, których mi brakuje?

Odpowiedz

2

** Dopasowuje 0 lub więcej katalogów. Poprzez umieszczenie * na końcu usunąć katalogi w katalogu, w zasadzie co 1 lub więcej:

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

Bez stałej ścieżce prowadzącej choć nie wygląda jak istnieje różnica jako 0 Długość mecze aren Interesujące i nie daj się włożyć w wyniki.

0

W takim przypadku nie ma.

Ale są przypadki, w których tego rodzaju rozróżnienie może być ważne. Jeśli zamiast tego wzorce miałyby być rekurencyjnie dopasowane do plików, a nie do katalogów, to pierwsze z nich zawierałyby pliki w bieżącym katalogu, podczas gdy te ostatnie wyświetlałyby tylko pliki, które znajdowały się co najmniej o jeden poziom niżej od bieżącego katalogu, ponieważ w środku znajdował się /*/. musi coś pasować.