Как вы фильтруете результаты Ruby Find.find ()? - PullRequest
4 голосов
/ 25 сентября 2010
Find.find("d") {|path| puts path}

Я хочу исключить определенный тип файлов, скажем *.gif и directories.

PS: Я всегда могу добавить код в свой блок, чтобы проверить имя файла и тип каталога, но я хочу, чтобы сам find фильтровал файлы для меня.

Ответы [ 2 ]

8 голосов
/ 25 сентября 2010

Не думаю, что вы можете сказать find для этого. Вы можете попробовать использовать Dir#[], который принимает файловые глобусы. Если вы ищете файлы определенного типа или файлы, которые можно отфильтровать с помощью языка шаблонов глобусов файлов, это может подойти лучше.

например

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

найдет все файлы xml, png, css и html в каталоге d.

Проверьте документы для получения дополнительной информации.

4 голосов
/ 25 сентября 2010

Вы не можете заставить find сделать это, но Find может помочь: в блоке вам нужно проверить, является ли текущий путь одним из тех, которые вы хотите исключить или нет;если так, то звоните Find#prune.Кажется, это стандартная идиома при использовании Find.

Если вы решите использовать Dir#[] вместо этого, вы можете вызвать reject для его результата, передавая блок, чтобы исключить определенные типы файлов.Тем не менее, обратите внимание, что, насколько я понимаю, Dir#[] читает все содержимое вашего каталога d, прежде чем вы сможете фильтровать, в то время как Find#prune гарантирует не читать содержимое сокращенных подкаталогов, если вы вызываете его в переданном блокедо Find#find.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...