我正在尝试读取指定目录中的每个文件。我想忽略隐藏文件。我已经找到了一种方法来做到这一点,但我很确定这是这样做的最低效的方法。
这是我尝试过的,
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
这样的文件将包含在列表中。