在 Ruby 中使用正则表达式忽略隐藏文件

Swa*_*rla 0 ruby regex

我正在尝试读取指定目录中的每个文件。我想忽略隐藏文件。我找到了一种方法来做到这一点,但我很确定这是最低效的方法。

这是我试过的

Find.find(directory) do |path|
     file_paths << path if path =~ /.*\./ and !path.split("/")[-1].to_s.starts_with?(".")
end
Run Code Online (Sandbox Code Playgroud)

这有效。但我讨厌它。

然后我尝试这样做,

file_paths << path if path =~ /.*\./ and path =~ /^\./
Run Code Online (Sandbox Code Playgroud)

但这对我没有任何回报。我在这里做错了什么?

eng*_*nky 5

你可以用 Dir

file_paths = Dir.glob("#{directory}/*")
Run Code Online (Sandbox Code Playgroud)

Dir#glob 文档:

返回通过扩展模式找到的文件名,模式是模式数组或模式字符串,作为数组或作为块的参数。

请注意,这不会匹配类 Unix 的隐藏文件(点文件)。为了将那些包含在匹配结果中,您必须使用类似“{ ,. }”。

根据@arco444,如果您希望递归搜索

file_paths = Dir.glob("#{directory}/**/*")  
Run Code Online (Sandbox Code Playgroud)