Search code examples
rubyfiledirectoryglobdotfiles

How to list directory contents including dotfiles but not . and ..?


How do I get Dir['*'] to include dotfiles, e.g., .gitignore, but not . and ..?

I.e., is there a better way to do:

`ls -A`.split "\n"

perhaps with Dir? The following solutions are close but both include . & ..:

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

So, the following works:

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

But, is there still a better way to do this?

I'm wondering this to fix line 9 of a Meteor Homebrew Formula.


Solution

  • You can't with Dir[], but you can with Dir.glob, which Dir[] calls:

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

    You can get rid of the . & .. easily:

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

    But I think it’s probably best to stick with your original way:

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

    (among other ways)

    However, if you don’t require a more sophisticated glob than *, Dir#children may be all you need (can always further filter/grep the results if more filtering is needed):

    Dir.children('.')