2012-10-25 39 views
5

Hier sind zwei Möglichkeiten glob zu verwenden, um rekursiv Verzeichnisse:Unterschied zwischen "**/* /" und "** /"?

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

Dir.glob("**/")

Der Ausgang erscheint das gleiche, zumindest für einen kleinen Teilbaum zu sein. Gibt es einen Unterschied zwischen diesen beiden Befehlen, die ich verpasse?

Antwort

2

Das ** entspricht 0 oder mehr Verzeichnissen. Durch die Platzierung Sie ein * am Ende entfernen Verzeichnisse in der Wurzel, so dass es im Wesentlichen: 1 oder mehr

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

Ohne einen führenden konstanten Weg aber sieht es nicht wie es ein Unterschied als 0 Länge Streichhölzer aren 't interessant und nicht in die Ergebnisse gebracht werden.

0

In diesem Fall gibt es keine.

Aber es gibt Fälle, in denen diese Art der Unterscheidung wichtig sein kann. Wenn die Muster stattdessen **/* und **/*/* wären, um rekursiv Dateien anstelle von Verzeichnissen zu vergleichen, würde das erste Dateien im aktuellen Verzeichnis enthalten, während das zweite nur Dateien auflisten würde, die seit dem /*/ in der Mitte mindestens eine Ebene unterhalb des aktuellen Verzeichnisses waren muss etwas zusammenbringen.