在Ruby中忽略带有正则表达式的隐藏文件

时间:2015-03-11 13:05:38

标签: ruby regex

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

这就是我尝试过的,

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

这很有效。但我讨厌它。

然后我尝试这样做,

file_paths << path if path =~ /.*\./ and path =~ /^\./

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

2 个答案:

答案 0 :(得分:4)

您可以使用Dir

file_paths = Dir.glob("#{directory}/*")

Dir#glob文档:

  

返回通过扩展模式找到的文件名,模式是模式的数组或模式String,可以是数组,也可以是块的参数。

     
    

注意,这与类似Unix的隐藏文件(dotfiles)不匹配。要在匹配结果中包含这些内容,您必须使用类似“{,。}”的内容。

  

per @ arco444如果你想要这个递归搜索

file_paths = Dir.glob("#{directory}/**/*")  

答案 1 :(得分:0)

如果您想忽略以.开头的文件,下面会将不包含在file_paths数组中的文件附加到

Find.find(directory) do |path|
    if File.file?(path)
        file_paths << path unless File.basename(path).start_with?(".")
    end
end

请注意,由于注释中提到的原因,这不一定会忽略隐藏文件。它目前还包括&#34;隐藏&#34;目录,即/some/.hidden/directory/normal.file等文件将包含在列表中。