Mike Durham wrote: > transfire / gmail.com wrote: >> Mike Durham wrote: >>> Hi, >>> If you see DEFINITION of DIR["**"] and DIR["*"] below it suggests there >>> should be some difference. >>> But if I run the CODE below I find they produce exactly the same >>> output. >>> Is my documentation wrong or what am I doing wrong? >>> What would you think '** Matches subdirectories recursively' means? >>> >>> Cheers, Mike >>> >>> >>> #### >>> CODE >>> #### >>> list = Dir["**"] >>> list.sort! >>> puts(list) >>> >>> list = Dir["*"] >>> list.sort! >>> puts(list) >>> >>> ########## >>> DEFINITION >>> ########## >>> Dir[ aString ] -> anArray >>> Returns anArray of filenames found by expanding the pattern >>> given in >>> aString. Note that this pattern is not a regexp (it's closer to a >>> shell >>> glob) and may contain the following metacharacters: >>> >>> ** Matches subdirectories recursively >>> * Matches zero or more characters >>> ? Matches any single character >>> [ charSet ] Matches any character from the given set of >>> characters. A >>> range of characters is written as charFrom-charTo. The set may be >>> negated with an initial uparrow (^). >>> { opt, opt, ... } Matches any one of the optional strings >> >> Try Dir['**/*'], it only applies this way. >> >> T. >> >> > using "**/*" doesn't seem to get all dirs, it misses the hidden ones > do you know the logic behind "**/*" or "*/*" ? > Cheers Mike The convention in file globbing is always to ignore the hidden files, unless explicitly stated otherwise. Also, the documentation explicitly says that "**" match recursively the /directories/, when "*" match any /files/. But looking at the documentation, and mainly this bit: librbfiles = File.join("**", "lib", "**", "*.rb") Dir.glob(libdirs) Make me wonder if anybody had proposed to use the operator / for joining files component. A recent addition to Python is a class that inherit string but with all the facilities for paths (i.e. globbing, listing, joining, ...) and I must say it is very convenient. The previous two lines could be written something like: librbfiles = Path.new("**")/"lib"/"**"/"*.rb" librbfiles.glob I think I will write it and post it here so that you may have a feeling for what it can (or cannot) do. Pierre