2010-09-24 67 views
4
Find.find("d") {|path| puts path} 

我想排除某些类型的文件,说*.gifdirectories如何过滤Ruby Find.find()结果?

PS:我总能我的块中添加代码来检查文件名和目录类型,但我想find本身来过滤文件给我。

回答

8

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

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

会发现所有的XML,PNG,CSS和HTML的目录d下的文件。

查看the docs了解更多信息。

3

您不能让find做到这一点,但Find可能会有所帮助:在该块中,您需要检查当前路径是否是您想要排除的路径之一;如果是这样,请致电Find#prune。这似乎是使用Find时的标准习惯用法。

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