possible DIR["**"] anomaly

M

Mike Durham

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
 
T

transfire

Mike said:
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.
 
M

Mike Durham

Mike said:
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.

Thanks a lot.
 
A

ara.t.howard

Try Dir['**/*'], it only applies this way.

i've settled on

Dir['**/**']

myself. anyone know the details on this poorly doccumented subject?

regards.

-a
 
S

Stefan Lang

Try Dir['**/*'], it only applies this way.

i've settled on

Dir['**/**']

myself. anyone know the details on this poorly doccumented
subject?

I use Dir['**/*'].

Generally I use a pattern of the form "<dir>/**/<pattern>"
to tell Ruby: "Give me all file names under <dir> and all
its subdirectories (recursively) that match <pattern>."
 
M

Mike Durham

Mike said:
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
 
P

Pierre Barbier de Reuille

Mike said:
Mike said:
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
 
N

nobu

Hi,

At Sun, 16 Jul 2006 18:20:31 +0900,
Pierre Barbier de Reuille wrote in [ruby-talk:202214]:
librbfiles = File.join("**", "lib", "**", "*.rb")
Dir.glob(libdirs)

You can do this on all platforms:

Dir.glob("**/lib/**/*.rb")
 
A

Alex Young

Pierre Barbier de Reuille wrote:
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.

Like this?

http://www.ruby-doc.org/stdlib/libdoc/pathname/rdoc/classes/Pathname.html
 
S

Stefan Lang

(e-mail address removed) wrote: [...]
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 "*/*" ?

Use:
Dir.glob("**/*", File::FNM_DOTMATCH)

Dir[patttern] is just a shortcut for Dir.glob(pattern, 0).
Just read "ri Dir.[]" and "ri Dir.glob".

HTH,
Stefan
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,535
Members
45,007
Latest member
obedient dusk

Latest Threads

Top