带有Dir ['*']的Ruby列表目录,包括dotfiles但不包括.和

ma1*_*w28 14 ruby glob file dir dotfiles

我如何Dir['*']包含dotfiles,例如.gitignore,但不是...

即,有更好的方法吗?

`ls -A`.split "\n"
Run Code Online (Sandbox Code Playgroud)

或许与Dir?以下解决方案很接近,但都包括.&..:

Dir.glob('*', File::FNM_DOTMATCH)
Dir['{.*,*}']
Run Code Online (Sandbox Code Playgroud)

所以,以下工作:

Dir.glob('*', File::FNM_DOTMATCH) - ['.', '..']
Run Code Online (Sandbox Code Playgroud)

但是,还有更好的方法吗?

我想知道如何修复Meteor Homebrew Formula的第9行.

And*_*all 16

你不能用Dir[],但你可以用Dir.glob,哪些Dir[]电话:

Dir.glob("*", File::FNM_DOTMATCH)
Run Code Online (Sandbox Code Playgroud)

你可以摆脱...容易:

Dir.glob("*", File::FNM_DOTMATCH).tap { |a| a.shift(2) }
Run Code Online (Sandbox Code Playgroud)

但我认为最好坚持原来的方式:

Dir.glob("*", File::FNM_DOTMATCH) - %w[. ..]
Run Code Online (Sandbox Code Playgroud)

(以及其他方式)

但是,如果你不需要更复杂的glob *,Dir#children可能就是你所需要的(如果需要更多的过滤,可以总是进一步filter/ grep结果):

Dir.children('.')
Run Code Online (Sandbox Code Playgroud)

  • 比"tap ..."更好的可能是`拒绝{| a | a =〜/^ \.{1,2} $ /}`,它提供更多信息,也不依赖于目录条目的顺序. (9认同)
  • @WayneConrad是的,我很快就做到了,因为OP在快速模式下编辑了他们的问题.最好的方法可能是数组差异`... - %w [...]`.拒绝所需的正则表达式似乎过于密集而不是实际上有点简单(不像我的代码对目标更清楚,虽然`:P`) (2认同)