Feature #5994


Dir.glob without wildcards returns pattern, not filename

Added by daz (Dave B) almost 11 years ago. Updated over 8 years ago.

Target version:


This is Windows specific, I guess, as filename case doesn't matter there.
Ruby version is not specific to 1.9.3p0 (ruby 1.8.7p334 gives the same).
The script below produces results that seem inconsistent.
Using special characters (wildcards) in the glob pattern returns the
actual filename on disk but a plain pattern (no wildcards) returns the
pattern itself. This means I have to use another method for producing
a file with the same name or else override the users case-style
preference (which is not my intention).


# ruby 1.9.3p0 (2011-10-30) [i386-mingw32]

Dir.chdir ENV['TEMP']
TMPDIR ='%Y%m%d_%H%M%S_delete')

TMPFN  = 'Foo', 'w') {}

p Dir.glob('*')   #=> ["Foo"]  ok
p Dir.glob('f?O') #=> ["Foo"]  ok

# But a glob without special characters returns
#  the glob pattern instead of the filename
p Dir.glob('foO') #=> ["foO"]  not wanted
p Dir['foO']      #=> ["foO"]  same as above
p Dir.glob('foO', File::FNM_CASEFOLD)
                # casefold ignored, as docs say

Dir.delete(File.join('..', TMPDIR))

# Same incorrect results from:
#   ruby 1.8.7p334 (2011-02-18) [i386-mingw32]

Related issues 1 (0 open1 closed)

Related to Ruby master - Bug #10015: Performance regression in Dir#[]ClosedActions

Updated by daz (Dave B) almost 11 years ago

This *nix behaviour would be fine, for me.

# ruby 1.8.7p302 (2010-08-16) [i486-linux]
p Dir.glob('*')                        #=> ["Foo"]  ok
p Dir.glob('f?O')                      #=> []       ok
p Dir.glob('foO')                      #=> []       ok
p Dir.glob('foO', File::FNM_CASEFOLD)  #=> ["Foo"]  ok

( Couldn't find an ENV['TEMP'] .. used ENV['HOME'] )


Updated by nobu (Nobuyoshi Nakada) almost 11 years ago

  • Category set to core
  • Status changed from Open to Feedback
  • Target version set to 2.0.0

Dave B wrote:

p Dir.glob('foO') #=> ["foO"]  not wanted

What do you want, an empty array same as case-sensitive systems?

Updated by daz (Dave B) almost 11 years ago

Hi Nobu,

I expected:

p Dir.glob('foO') #=> ["Foo"]

The current behaviour would be difficult to justify.
The doc string says ...
"Returns the filenames found by expanding pattern ..."

There is no filename "foO"; it exists only as a glob pattern.

Instead of answering the question "Are there files which match this
pattern", it has answered an artificial question "What glob pattern
did I use to search for files"; I already knew the answer to that. ;)

I'm doing a Windows System Restore from Linux and the registry databases
are not things I want to make subtle changes to.

CONFIG   = File.join( WINDIR, 'system32', 'config' )
Dir.chdir CONFIG

hives = %w{ system software sam security default }

# Can't do this ...
p HIVES_NO = {|vn| Dir[vn][0] }
#=> ["system", "software", "sam", "security", "default"]

# Have to do this, instead ...
p HIVES_OK = Dir['*'].delete_if {|fn| !hives.include?(fn.downcase)}
#=> ["default", "SAM", "SECURITY", "software", "system"]



Updated by ko1 (Koichi Sasada) about 10 years ago

  • Status changed from Feedback to Assigned
  • Assignee set to nobu (Nobuyoshi Nakada)

nobu, could you reply to it?

Actions #5

Updated by nobu (Nobuyoshi Nakada) almost 10 years ago

  • Tracker changed from Bug to Feature

Updated by ko1 (Koichi Sasada) almost 10 years ago

  • Target version changed from 2.0.0 to 2.1.0

ping -> nobu

Updated by hsbt (Hiroshi SHIBATA) almost 9 years ago

  • Target version changed from 2.1.0 to 2.2.0

Updated by nobu (Nobuyoshi Nakada) almost 9 years ago

  • Status changed from Assigned to Closed
  • % Done changed from 0 to 100

Applied in changeset r44796.

dir.c: glob cases on case-insensitive system

  • dir.c (glob_helper): return the filename with actual cases on
    the filesystem if it is case-insensitive. [ruby-core:42469]
    [Feature #5994]

Updated by nobu (Nobuyoshi Nakada) over 8 years ago

  • Description updated (diff)
Actions #10

Updated by nobu (Nobuyoshi Nakada) over 6 years ago

  • Related to Bug #10015: Performance regression in Dir#[] added

Also available in: Atom PDF