2016-04-27 6 views
1

ich ein Verzeichnis mit beiden versteckt (Name mit . Start) haben und nonhidden Dateien wie folgt:Wie beide versteckt und nonhidden Dateien in einem einzigen Anruf zu bekommen

$ ls -a1 
. 
.. 
.hidden 
not-hidden 

Wie kann ich eine Liste bekommen alle in einem einzigen Anruf?

erwartete ich Dir['*'] alle Dateien zurück, aber es funktioniert nicht:

Dir['*'] 
# => ["not-hidden"] 

Das Beste, was ich von ist denken kann: ein Weg, um

Dir['*'] + Dir['.*'] 
# => ["not-hidden", ".", "..", ".hidden"] 

Und ich auch dort erwartet Verwenden Sie eine Regex, aber ich kann keine finden, und es ist nicht möglich, select und grep zu verwenden, da es keinen Anruf gibt, der sowohl versteckte als auch nicht verborgene auswählen kann.

Antwort

5

Sie Dir::glob mit dem FNM_DOTMATCH Flag verwenden:

Dir.glob('*', File::FNM_DOTMATCH) 
#=> [".", "..", ".hidden", "not-hidden"] 

oder Dir::entries:

Dir.entries('.') 
#=> [".", "..", ".hidden", "not-hidden"] 

Sie können auch Muster kombinieren {p,q} verwenden, so würde Dir['{*,.*}'] auch funktionieren.

+0

Perfekt, danke! –

Verwandte Themen