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



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

这是我尝试过的,

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 =~ /^./

但这对我来说一无所获。我在这里做错了什么?

你可以只使用Dir

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

Dir#glob文档:

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

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

每@arco444,如果您希望它以递归方式搜索

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

如果你想忽略以 . 开头的文件,下面的文件会将那些不以 file_paths 数组开头的文件附加到 数组

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

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

相关内容

  • 没有找到相关文章

最新更新