Каталог списка Ruby с Dir['*'], включая файлы точек, но не. а также

Как я могу получить Dir['*'] включить точечные файлы, например, .gitignore, но нет . а также ..?

Т.е. есть ли лучший способ сделать:

`ls -A`.split "\n"

возможно с Dir? Следующие решения близки, но оба включают . & ..:

Dir.glob('*', File::FNM_DOTMATCH)
Dir['{.*,*}']

Итак, следующие работы:

Dir.glob('*', File::FNM_DOTMATCH) - ['.', '..']

Но есть ли еще лучший способ сделать это?

Мне интересно, чтобы исправить 9-ю линию Метеоритной формулы домашнего приготовления.

4 ответа

Вы не можете с Dir[], но вы можете с Dir.glob, который Dir[] звонки:

Dir.glob("*", File::FNM_DOTMATCH)

Вы можете избавиться от . & .. без труда:

Dir.glob("*", File::FNM_DOTMATCH).tap { |a| a.shift(2) }

Но я думаю, что, вероятно, лучше придерживаться вашего оригинального пути:

Dir.glob("*", File::FNM_DOTMATCH) - %w[. ..]

(среди прочих способов)

Вот более короткая версия:

Dir['{.[^\.]*,*}']

Следующие работы с Dir.glob:

Dir.glob("{*,.?*}")

Вот как я это сделал, чтобы найти все файлы в каталоге, включая скрытые файлы, и удалить .git/, ., .., и каталоги:

            files = Dir.glob("#{ARGV.first}/**/*", File::FNM_DOTMATCH)
      files = files.grep_v(/\/.git\//).grep_v(/\/\.$/).grep_v(/\/\.\.$/)
      files = files.select { |file| File.file?(file) }
Другие вопросы по тегам