我试图读取指定目录中的每个文件。我想忽略隐藏文件。我找到了一种方法来做到这一点,但我很确定这是最低效的方法。
这就是我尝试过的,
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 =~ /^\./
但这对我没有任何回报。我在这里做错了什么?
答案 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
等文件将包含在列表中。