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

Ruby中如何复制仅以字母而非数字开头的文件夹

原代码问题分析

原代码存在4个明显问题,无法实现需求:

  • 匹配规则错误:[a-z]仅能匹配名称长度为1的小写字母开头的路径,名称长度大于1的文件夹(比如docs、project1)完全无法匹配
  • 大小写限制:默认glob区分大小写,大写字母开头的文件夹(比如Assets、User)会被直接过滤
  • 未筛选路径类型:没有判断匹配到的路径是不是文件夹,符合命名规则的普通文件也会被误复制
  • 缺少目标路径校验:如果目标路径dest不存在,cp_r会直接抛出异常
正确实现方式

首先需要修正glob匹配规则,增加文件夹过滤逻辑,提前做好目标路径的兼容处理,完整实现代码如下:

require 'fileutils'

# 按需替换源路径前缀、目标路径
source_root = "folderpath"
target_root = "dest"

# 提前创建目标路径,避免不存在时复制报错
FileUtils.mkdir_p(target_root) unless File.exist?(target_root)

# glob匹配首字符为字母、后续任意字符的路径,不区分大小写
Dir.glob("#{source_root}/[a-zA-Z]*", File::FNM_CASEFOLD) do |entry|
  # 跳过非文件夹的条目
  next unless File.directory?(entry)
  # 递归复制文件夹到目标路径
  FileUtils.cp_r(entry, target_root)
end

如果不需要匹配大写字母开头的文件夹,删除File::FNM_CASEFOLD参数即可。如果需要避免覆盖目标路径下的同名文件夹,可以给cp_r增加:noop => true先预览复制行为,确认后再执行,或者增加:update => true参数仅复制更新的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:45:04