18

如何Dir['*']包含点文件,例如.gitignore,但不包含...

即,有没有更好的方法:

`ls -A`.split "\n"

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

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

因此,以下工作:

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

但是,还有更好的方法来做到这一点吗?

我想知道这是为了修复Meteor Homebrew Formula的第 9 行。

4

3 回答 3

20

你不能 with Dir[],但你可以 with Dir.glob,它Dir[]调用:

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

您可以轻松摆脱.& ..

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

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

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

(除其他方式外)

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

Dir.children('.')
于 2012-07-08T19:01:11.703 回答
3

这是一个较短的版本:

Dir['{.[^\.]*,*}']
于 2013-12-03T16:12:00.020 回答
0

以下是我在目录中查找所有文件的方法,包括隐藏文件和删除、、、和.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) }
于 2021-11-20T00:38:16.017 回答