在Linux下,在Ruby中打开一个不区分大小写的文件

有没有办法在 Linux下在 Ruby中打开文件大小写?例如,给定字符串foo.txt,可以打开文件FOO.txt吗?

一种可能的方法是读取目录中的所有文件名,并手动搜索列表中所需的文件,但是我正在寻找一种更直接的方法.

解决方法

虽然你不能打开大小写不敏感,你可以写你所建议的目录搜索非常简洁.例如
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' }

或者写一个方法来为给定的文件名构建一个不区分大小写的glob:

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

相关文章

/etc/sysctl.conf这个目录主要是配置一些系统信息,/etc/sys...
1.作用 useradd或adduser命令用来建立用户帐号和创建用户的起...
它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅...
不管是我们在安装软件还是监测软件的使用性能,我们都要随时...
装好Tomcat7后,发现除了本机能访问外界访问不了,岂有此理。...
修改防火墙配置需要修改 /etc/sysconfig/iptables 这个文件,...