在我的rails应用程序中,我正在连接到STP并根据模式下载文件. 我的代码看起来像这样:

require 'net/sftp'

...

Net::SFTP.start(host, user, config) do |sftp|
 Rails.logger.info "Connected to sftp"
 sftp.dir.glob(@file_path, @file_regex) do |file|
 ...
 end
end

我需要下载xlsx和CSV文件.下面是获取@file_regex的函数:

def fetch_sftp_file_format
 ist_timezone = TZInfo::Timezone.get('Asia/Kolkata')
 current_date = Time.now.in_time_zone(ist_timezone).strftime('%Y_%m_%d')
 "*_#{current_date}.xlsx"
end

此代码运行良好,但我无法一起设置xlsx and csv文件的模式. 所有文件类型"*_#{current_date}.*"的模式也在工作.

我try 了"*_#{current_date}.(xlsx|csv)""*_#{current_date}.(xlsx|csv)$""*_#{current_date}.{xlsx,csv}",但这些都不起作用.

net-sftp gem版本:4.0.0

推荐答案

Docs有点误导,他们说的是"Works as ::Dir.glob",而应该读为"Works as ::File.fnmatch"

Net::SFTP图书馆将File::fnmatch用于Operations::Dir#glob.

根据DocsFile::fnmatch.

该模式不是一个正规表达式;相反,它遵循类似于shell文件名globbing的规则.它可能包含以下元字符:.

{a,b}

如果启用File::FNM_EXTGLOB标志,则匹配模式a和模式b.行为就像Regexpunions ((?:a|b)).

因此,您似乎需要将模式更改为:

"*_#{current_date}.{xlsx,csv}"

并启用适当的标志:

sftp.dir.glob(@file_path, @file_regex,File::FNM_EXTGLOB)

Ruby-on-rails相关问答推荐

HTTP:MimeNegotiation::InvalidType(html不是有效的MIME类型):""

将参数传递给视图中的嵌入操作时遇到问题

Ruby/Rails 相当于 Python 的 sys.addAuditHook

Rails 6:强类型原始 SQL 查询返回数组类型

复制我的活动时,活动描述没有复制过来

Rails 7 共享刺激控制器功能

Rails - Comment.count没有改变1

URL 中的 Rails slugs - 使用 Active Record Model Post 的 Title 属性而不是 ID

你如何发布到 Capybara 中的 URL?

Rails 模型方法 self.与普通

在 Ruby on Rails 中获取空临时目录的最佳方法是什么?

simple_forms 自定义数据属性

什么是 Ruby 中的 Python 文档字符串?

如何在 Rails 应用程序中使用长 id?

在 Rails 中复制模型实例

Ruby on Rails 基本概念总结

加载常量时自动加载常量时检测到循环依赖

使用 PostgreSQL 的模式和 Rails 创建多租户应用程序

Postgresql JSON 数据列不同

您将如何解析 Ruby 中的 url 以获取主域?