你如何过滤Ruby Find.find()结果?

时间:2010-09-24 21:05:33

标签: ruby find

Find.find("d") {|path| puts path}

我想要排除某些类型的文件,例如*.gifdirectories

PS: 我总是可以在我的块中添加代码来检查文件名和目录类型,但我希望find本身可以过滤文件我

2 个答案:

答案 0 :(得分:8)

我认为你不能告诉他们这样做。你可以尝试使用接受文件globs的Dir#[]。如果您正在寻找特定类型的文件,或者可以使用文件glob模式语言过滤的文件,那么它可能更合适。

例如

Dir["dir/**/*.{xml,png,css,html}"]

会在目录d。

下找到所有xml,png,css和html文件

查看the docs了解详情。

答案 1 :(得分:4)

你不能让find这样做,但是Find可能会有所帮助:在这个区块中,你需要检查当前路径是否是你想要排除的路径之一;如果是,请拨打Find#prune。这似乎是使用Find时的标准习语。

如果您决定使用Dir#[],则可以在其结果上调用reject,传递一个块以排除某些类型的文件。但是,请注意,据我所知,Dir#[]在您可以过滤之前读取d目录的所有内容,而Find#prune保证不读取已修剪子目录的内容在传递给Find#find的块中调用它。