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

如何在Ruby中从文件路径提取各级父文件夹名称

Ruby 提取文件路径中所有上层文件夹名称的实现方案

方案1:使用Pathname标准库(推荐,跨平台适配性强、可读性高)

直接调用Ruby内置的Pathname标准库即可实现层级遍历,无需自己处理路径分隔符适配问题:

require 'pathname'

# 示例路径
file_path = "E:/aaa/bbb/ccc/filename.jpg"
path_obj = Pathname.new(file_path)

folder_names = []
# 从文件所属的最内层父目录开始逐层向上遍历
path_obj.parent.ascend do |current_dir|
  # 遍历到根目录(Windows的盘符、Unix的/)时终止
  break if current_dir.root?
  folder_names << current_dir.basename.to_s
end

# 此时folder_names默认顺序为从内到外:["ccc", "bbb", "aaa"]
# 如果需要从上层到下层的顺序,反转数组即可
folder_names = folder_names.reverse
# 输出 ["aaa", "bbb", "ccc"]

方案2:使用File原生方法,无需引入额外依赖

如果不想引入标准库,也可以用File类自带的路径拆分方法实现:

file_path = "E:/aaa/bbb/ccc/filename.jpg"
# 先排除文件名,拿到完整目录路径
dir_path = File.dirname(file_path)
folder_names = []

loop do
  # 拆分当前目录为「上层目录路径」和「当前层目录名」两部分
  upper_dir, current_folder = File.split(dir_path)
  # 遍历到根目录时终止循环
  break if upper_dir == dir_path
  folder_names << current_folder
  dir_path = upper_dir
end

# 按需调整顺序
folder_names = folder_names.reverse
# 输出 ["aaa", "bbb", "ccc"]

补充说明

  • 两种方案都自动适配Windows、Unix/Linux、macOS的路径分隔符,相对路径也可以正常处理
  • 如果你需要提取指定层级的文件夹,直接取数组对应索引即可,比如最内层父文件夹ccc对应folder_names[-1],和你之前用方法获取的结果一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:09:03