जबकि आप open
मामले नहीं बना सकते असंवेदनशील आप निर्देशिका खोज आप काफी संक्षेप में सुझाव लिख सकते हैं। जैसे
filename = Dir.glob('foo.txt', File::FNM_CASEFOLD).first
if filename
# use filename here
else
# no matching file
end
ध्यान दें कि जबकि documentation suggests that FNM_CASEFOLD can't be used with glob यह गलत या पुरानी हो गई प्रतीत होता है।
वैकल्पिक
आप FNM_CASEFOLD
तो विकल्प के एक जोड़े का उपयोग कर के बारे में चिंतित हैं, तो कर रहे हैं:
filename = Dir.glob('*').find { |f| f.downcase == 'foo.txt' }
या एक छोटे से विधि लिख दिए गए फ़ाइल नाम के लिए एक केस संवेदी ग्लोब निर्माण करने के लिए:
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]"
और फिर आप कर सकते हैं:
filename = Dir.glob(ci_glob('foo.txt')).first
यदि एकाधिक फाइलें मिलती हैं तो क्या होगा? यादृच्छिक रूप से उनमें से एक उठाओ? –
@Ignacio: हाँ, यह एकमात्र उचित विकल्प है। लेकिन यह मामला मेरी स्थिति में असंभव है। – imgx64