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

在Ruby中如何检查指定目录是否包含.pdf文件并获取其文件名与路径

问题原因

File.exist?仅支持校验单个明确的文件/路径是否存在,不支持通配符匹配,因此你传入带*的路径会直接查询是否有名称完全匹配的文件,自然返回false。另外路径尽量使用正斜杠/代替Windows系统的反斜杠\,Ruby全平台兼容正斜杠,还能避免字符串转义带来的异常。

最简解决方案:用Dir.glob

Dir.glob是Ruby专门用来按通配符匹配批量查找文件的方法,直接返回所有匹配文件的路径数组,满足你扫描文件夹找PDF的需求:

# 扫描test目录下所有PDF文件,返回路径数组
pdf_files = Dir.glob("test/*.pdf")

# 如果需要同时扫描test下所有子目录的PDF,把路径改为 test/**/*.pdf 即可

完整可运行示例

# 替换为你要扫描的文件夹路径
scan_dir = "test"

# 查找所有PDF
invoice_list = Dir.glob("#{scan_dir}/*.pdf")

if invoice_list.empty?
  puts "未找到PDF格式的发票文件"
else
  puts "共找到#{invoice_list.length}个发票文件:"
  invoice_list.each do |file_path|
    # 打印路径和文件名,File.basename可以单独提取文件名
    puts "- 文件名:#{File.basename(file_path)},完整路径:#{file_path}"
  end
end

如果你想用File.fnmatch?的实现方式

如果你要遍历文件自行匹配,可以参考以下写法:

scan_dir = "test"
# 遍历目标目录下的所有文件
Dir.foreach(scan_dir) do |file_name|
  # 跳过目录本身的.和..
  next if file_name == '.' || file_name == '..'
  # 匹配PDF后缀
  if File.fnmatch?('*.pdf', file_name)
    full_path = File.join(scan_dir, file_name)
    puts "找到发票:#{full_path}"
  end
end

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:27:03