Mientras que no se puede hacer open
mayúsculas y minúsculas se puede escribir la búsqueda en el directorio que usted sugirió bastante concisa. p.ej.
filename = Dir.glob('foo.txt', File::FNM_CASEFOLD).first
if filename
# use filename here
else
# no matching file
end
Tenga en cuenta que mientras que el documentation suggests that FNM_CASEFOLD can't be used with glob esto parece ser incorrecto o fuera de fecha.
Alternativas
Si usted está preocupado acerca del uso de FNM_CASEFOLD
luego un par de alternativas son:
filename = Dir.glob('*').find { |f| f.downcase == 'foo.txt' }
o escribir un pequeño método para construir un caso pegote insensible para un nombre de archivo dado:
def ci_glob(filename)
glob = ''
filename.each_char do |c|
glob += c.downcase != c.upcase ? "[#{c.downcase}#{c.upcase}]" : c
end
glob
end
irb(main):024:0> ci_glob('foo.txt')
=> "[fF][oO][oO].[tT][xX][tT]"
y entonces usted puede hacer:
filename = Dir.glob(ci_glob('foo.txt')).first
¿Qué pasa si coinciden varios archivos? Elija uno de ellos al azar? –
@Ignacio: Sí, esa es la única opción razonable. Pero ese caso es poco probable en mi situación. – imgx64