问题描述
如何使Dir['*']
包含点文件,例如.gitignore
,但不包括.
和..
?
即,有没有更好的办法:
`ls -A`.split "
"
可能与Dir
?以下解决方案很接近,但都包括.
&;..
:
Dir.glob('*', File::FNM_DOTMATCH)
Dir['{.*,*}']
因此,以下方法有效:
Dir.glob('*', File::FNM_DOTMATCH) - ['.', '..']
但是,还有更好的方法吗?
我想用它来修复Meteor Homebrew Formula的第9行。
推荐答案
不能使用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#children
可能就足够了(如果需要更多过滤,则始终可以进一步filter
/grep
结果):
Dir.children('.')