You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让R语言fs包dir_ls函数的glob匹配不区分大小写?

解决fs包dir_ls中glob匹配不区分大小写的问题

这个问题我之前在处理R脚本文件的时候也碰到过——fs包的glob匹配默认是区分大小写的,尤其是在macOS、Linux这类类Unix系统上,Windows因为文件系统本身不区分大小写,可能不会遇到这个困扰。这里有几个实用的解决办法:

  • 使用正则表达式替代glob(推荐方案)
    fs的dir_ls()支持直接传入正则表达式,还能通过ignore.case参数开启不区分大小写匹配,写法灵活又省心:

    library(fs)
    # 匹配所有以.R或.r结尾的文件
    dir_ls(regex = "\\.R$", ignore.case = TRUE)
    

    简单解释下:\\.R$是正则表达式语法,用来匹配以.R结尾的文件;加上ignore.case = TRUE后,不管后缀是大写.R还是小写.r,都会被成功匹配到。如果要匹配其他后缀(比如.Rmd/.rmd),只要把正则改成\\.Rmd$就行,同样支持大小写不敏感。

  • 用glob的字符集写法兼容大小写
    如果习惯用glob参数,也可以通过字符集的方式同时匹配大小写字母:

    dir_ls(glob = "*.[Rr]")
    

    这里[Rr]表示匹配括号里的任意一个字符,所以能同时命中.R和.r后缀的文件。不过这种写法对于长后缀(比如.Rprofile)会比较繁琐,需要把每个字母的大小写都列出来,不如正则表达式高效。

  • 补充:系统文件系统的影响
    顺带提一句,Windows系统的默认文件系统是不区分大小写的,所以在Windows上执行dir_ls(glob = "*.R")其实也能匹配到.r文件;但类Unix系统默认区分文件名大小写,所以必须用上面的方法来处理。

内容的提问来源于stack exchange,提问作者cephalopod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:44:01