Каталог списка 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[. ..]
(среди прочих способов)
Вот как я это сделал, чтобы найти все файлы в каталоге, включая скрытые файлы, и удалить
.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) }