Linux 下的 Ruby 不区分大小写地打开文件

2024-01-19

有没有办法在Linux下的Ruby中不区分大小写地打开文件?例如,给定字符串foo.txt,我可以打开该文件吗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

或者,您可以非常简洁地编写您建议的目录搜索。例如

filename = Dir.glob('*').find { |f| f.downcase == 'foo.txt' }

在 Ruby 3.1 之前,可以使用FNM_CASEFOLD选项使glob不区分大小写,例如

filename = Dir.glob('foo.txt', File::FNM_CASEFOLD).first
if filename
  # use filename here
else
  # no matching file
end

文档建议FNM_CASEFOLD不能与 glob 一起使用 http://ruby-doc.org/core-2.2.2/Dir.html#method-c-glob but it did实际上可以在旧的 Ruby 版本中工作。然而,正如所提到的lildude https://stackoverflow.com/users/573122/lildude in the comments https://stackoverflow.com/questions/3651952/open-a-file-case-insensitively-in-ruby-under-linux/3652293?noredirect=1#comment131378420_3652293, the 行为现已内联 https://github.com/ruby/ruby/pull/4583与文档,所以不应该使用这种方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux 下的 Ruby 不区分大小写地打开文件 的相关文章

  • .NET Core 中的跨平台文件名处理

    如何处理文件名System IO以跨平台方式运行类以使其在 Windows 和 Linux 上运行 例如 我编写的代码在 Windows 上完美运行 但它不会在 Ubuntu Linux 上创建文件 var tempFilename Dat
  • Ruby 枚举器中的“break”与“raise StopIteration”

    如果我使用 Ruby Enumerators 来实现生成器和过滤器 generator Enumerator new do y x 0 loop do y lt lt x x 1 break if x gt CUTOFF end end l
  • 如何从 ruby​​ 中的字符串名称创建类实例?

    我有一个类的名称 我想创建该类的一个实例 以便我可以循环该类的架构中存在的每个 Rails 属性 我该怎么做呢 我的名称是我想要检查的类的字符串 我想我需要实例化一个类实例 以便我可以 循环遍历它的属性并打印它们 在 Rails 中你可以这
  • 如何修复“iptables:没有该名称的链/目标/匹配”?

    我在我的 Linux 嵌入式系统上构建并安装了 iptables 如果我列出所有规则 则一切正常 iptables list Chain INPUT policy ACCEPT target prot opt source destinat
  • Unix 命令列出包含字符串但*不*包含另一个字符串的文件

    如何递归查看包含一个字符串且不包含另一个字符串的文件列表 另外 我的意思是评估文件的文本 而不是文件名 结论 根据评论 我最终使用了 find name html exec grep lR base maps xargs grep L ba
  • 为什么我收到“无法进行二进制日志记录”的信息。在我的 MySQL 服务器上?

    当我今天启动 MySQL 服务器并尝试使用以下命令进行一些更改时用于 MySQL 的 Toad http www quest com toad for mysql 我收到此消息 MySQL 数据库错误 无法进行二进制日志记录 消息 交易级别
  • Rails/Nginx 中的超时——最佳实践

    我正在开发一个应该在 Nginx 服务器上运行的 Rails 应用程序 根据输入 应用程序可能需要很长时间来处理请求 或者在出现错误时挂起 因此我想防止进程永远运行 除了确保客户端收到超时信号的 Nginx 配置之外 我想我可能仍然需要确保
  • “rmagick”gem 安装问题

    我在尝试在 centos 上安装 rmagick gem 时遇到问题 以下是我得到的输出 谁能帮我识别一下我缺少什么包裹 我已经安装了所有提到的另一个堆栈溢出线程 RMagick安装错误 https stackoverflow com qu
  • Rails:named_scope、lambda 和块

    我认为以下两个是等效的 named scope admin lambda company id conditions gt company id company id named scope admin lambda do company
  • rvm gem 安装错误?

    我正在摆弄 ruby gems 和 rvm 它工作得很好 但现在当我尝试安装 gem 时出现错误 gem install Rails错误 同时 执行 gem Errno EACCES 权限被拒绝 Users da rvm gems ruby
  • 抑制 makefile 中命令调用的回显?

    我为一个作业编写了一个程序 该程序应该将其输出打印到标准输出 分配规范需要创建一个 Makefile 当调用它时make run gt outputFile应该运行该程序并将输出写入一个文件 该文件的 SHA1 指纹与规范中给出的指纹相同
  • 如何通过替换为空页映射来取消映射 mmap 文件

    Linux 用户空间有没有办法用空页面 映射自 dev null 或者可能是一个空页面 重复映射到从文件映射的页面的顶部 对于上下文 我想找到这个 JDK bug 的修复 https bugs openjdk java net browse
  • 跟踪 Linux 程序中活跃使用的内存

    我想跟踪各种程序在特定状态下接触了多少内存 例如 假设我有一个图形程序 最小化时 它可能会使用更少的内存 因为它不会重新绘制窗口 这需要读取图像和字体并执行大量库函数 这些对象仍然可以在内存中访问 但实际上并没有被使用 类似的工具top它们
  • 使用 grep 查找包含所有搜索字符串的行

    我有一个文件 其中包含很多与此类似的行 id 2796 some model Profile message type MODEL SAVE fields account 14 address null modification times
  • 如何使用 bash 锁定文件

    我有一个任务从远程服务器同步目录 rsync av email protected cdn cgi l email protection srv data srv data 为了使其定期运行并避免脚本 reEnter 问题 我使用 rsyn
  • 在 Ruby 中创建一个空文件:相当于“touch”?

    创建一个的最佳方式是什么emptyRuby 中的文件 类似于 Unix 命令的东西 touch https en wikipedia org wiki Touch 28Unix 29 touch file txt FileUtils tou
  • 仅打印“docker-container ls -la”输出中的“Names”列

    发出时docker container ls la命令 输出如下所示 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a67f0c2b1769 busybox tail f dev
  • ruby从1.8.7升级到1.9.2(使用Rails 3.1.1)后本地服务器错误

    我刚刚安装了rvm并使用rvm将ruby从1 8 7升级到1 9 2 我在我的应用程序上运行了捆绑安装 它重新安装了我的 gems 当我在本地运行 Rails 服务器并将浏览器导航到 localhost 3000 时 服务器日志中显示以下错
  • 红宝石接球和效率

    catch在 Ruby 中意味着跳出深度嵌套的代码 在 Java 中 例如用Java也可以达到同样的效果try catch用于处理异常 但它被认为是糟糕的解决方案 而且效率非常低 在 Ruby 中 我们有处理异常的方法begin raise
  • Ruby/Rails 集合到集合

    我有两个表与一个连接表连接 这只是伪代码 Library Book LibraryBooks 我需要做的是 如果我有一个图书馆的 id 我想获取该图书馆拥有的所有书籍所在的所有图书馆 因此 如果我有图书馆 1 图书馆 1 中有书籍 A 和

随机推荐

  • 如何调试此错误:CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER?

    我的应用程序中出现错误 我不知道如何解决 以前有人见过这个错误 Binary Image Name Address Symbol 0 RepZio 0x002bd302 testflight backtrace 1 RepZio 0x002
  • C# using 语句位于代码页顶部

    几乎所有 C 文件都有using页面顶部的声明 i e using System using System IO code 做什么的using声明意味着位于页面顶部 为什么语法与其他的不同using声明声明 i e using Resour
  • 如何使用硒滚动页面

    我正在使用 FirefoxDriver 网络驱动程序 Firefox 窗口中加载的页面是一个大页面 我想使用 selenium 滚动该页面 我想知道如何做到这一点 如果你想使用selenium webdriver在firefox窗口上滚动
  • 强制QWebView在单独的线程中下载网页内容?

    我如何强制 QWebView 在单独的线程中下载网页和相关内容 你不能轻易 您可以实现自己的 QNetworkAccessManager 请参阅 createRequest 将工作卸载到另一个线程中的 QNetworkAccessManag
  • Angular 6 + Popper.js(无 jQuery)

    我正在尝试设置 Popper js 以使用 Angular 5 无需 bootstrap 或 jquery 我尝试按照这个https github com FezVrasta popper js react vuejs angular an
  • Xcode 4 Cmd+alt+上/下重新映射

    我意识到头文件和实现文件之间的切换已移至 ctrl cmd up down 然而 这非常烦人 因为在我可以用一只手的 3 个手指快速完成之前 箭头键附近没有 Ctrl 按钮 所以我打开首选项发现我可以更改键绑定并尝试按 cmd alt 上
  • 什么时候适合使用引用变量?为什么?您能解释一下实际的语法和位置吗? [复制]

    这个问题在这里已经有答案了 我是 C 的新手 我们最近开始在课堂上探索参考变量 我对它们感到非常困惑 不一定是如何做它们 因为我知道它们会切换变量值 但更多的是沿着为什么开发人员想要做这样的事情 他们完成了什么 它们节省内存吗 他们是否避免
  • 如何在从 v$sql 接收到的 Oracle 查询中查找参数?

    我使用查询 select LAST LOAD TIME ELAPSED TIME MODULE SQL TEXT elasped from v sql WHERE MODULE JDBC Thin Client ORDER BY LAST
  • 将十进制小时转换为小时、分钟和秒

    xslt 1 0 中是否有更优雅的解决方案 我知道 xslt 2 0 有内置函数 我正在获取一个以十进制小时表示的数字 需要将其表示为 HH MM SS 目前我有以下功能正常的
  • 如何使用 VB6 的 Web 服务?

    我需要从 VB6 程序使用外部 Web 服务 如果可能的话 我希望能够在没有 SOAP 工具包的情况下部署我的程序 但这不是必需的 我没有网络服务源 也没有创建它 这是供应商提供的服务 那么 除了 SOAP 工具包之外 使用 VB6 的 W
  • 扩展 MVC3 razor Html.LabelFor 添加 css 类

    我正在尝试将 css 类添加到 EditorTemplate 上的 Html LabelFor Html LabelFor model gt model Name new class myLabel 我的期望例如 label 应该选择 cs
  • BigQuery 写入时数据流作业失败并出现后端错误

    我的工作因最终导入 BigQuery 相关的几个不同错误而失败 我已经运行了 5 次 每次都失败 尽管错误消息有时会有所不同 当我在本地针对 SQLite 数据库运行该工作时 该工作运行良好 因此我认为问题出在 Google 后端 一条错误
  • 使用 SSL 的 wcf net.tcp

    有人有在 WCF 中使用 SSL 和 net tcp 绑定的经验吗 我读过这是可能的 但没有找到有关如何实现它的良好信息 我很想听听任何了解或实施过这一点的人的意见 提前致谢 看看这个链接里的内容 http msdn microsoft c
  • 通过传递带有要选择的列名称的有序向量,对 dplyr 中的列进行动态排序

    我使用下面的代码生成一个简单的汇总表 Data data mtcars Lib require dplyr Summary mt sum lt mtcars gt group by am gt summarise each funs min
  • php 回显尖括号

    我想在页面上显示文本 文本应该如下所示
  • CASE 语句未正确定义列雪花

    我有一个以下格式的查询 用于执行COALESCE以及使用定义一个新列CASE陈述 SELECT COALESCE mm1 missing AS mm1 COALESCE mm2 missing AS mm2 CASE WHEN mm1 fa
  • HTML::PullParser 随机分割文本元素

    我正在使用 Perl 模块HTML PullParser 我注意到它有时会随机分割文本元素 据我所知 例如 如果我有一个 html 文件test html与内容 font style font family none size 2 THE
  • 确定掷骰子中数字出现的频率

    对于游戏 我试图确定在给定的骰子数量下特定的 出现的频率 我知道 这个问题看起来很奇怪 让我尝试用实际数字来解释它 因此 对于 1 个骰子 每个数字的频率将相同 1 6 将出现相同的次数 现在对于 2 个骰子 情况会变得不同 我想 5 6
  • 无法为 Facebook 测试用户添加当前城市

    我正在开发基于位置的功能 因此在测试应用程序下创建了一些 Facebook 测试帐户 我试图为所有测试用户添加当前城市 手动 但 Facebook 在输入城市时抛出以下错误 您请求的内容现在无法显示 可能是 暂时不可用 您点击的链接可能已过
  • Linux 下的 Ruby 不区分大小写地打开文件

    有没有办法在Linux下的Ruby中不区分大小写地打开文件 例如 给定字符串foo txt 我可以打开该文件吗FOO txt 一种可能的方法是读取目录中的所有文件名并手动搜索所需文件的列表 但我正在寻找一种更直接的方法 一种方法是编写一个小