99 votes

Obtenir une liste de dossiers dans un répertoire

Comment puis-je obtenir une liste des dossiers qui existent dans un certain répertoire avec Ruby?

Dir.entries() semble être proche, mais je ne sais pas comment me limiter aux dossiers.

119voto

empo Points 12803

J'ai trouvé cela plus utile et facile à utiliser:

 Dir.glob('*').select {|f| File.directory? f}
 

tous les dossiers du répertoire en cours sont exclus, . et .. .

Pour recurse des dossiers, utilisez simplement ** au lieu de * .

78voto

scottd Points 4120

La Jordanie est proche, mais Dir.entries ne renvoie pas le chemin complet prévu par File.directory? . Essaye ça:

  Dir.entries('/your_dir').select {|entry| File.directory? File.join('/your_dir',entry) and !(entry =='.' || entry == '..') }
 

50voto

johannes Points 3878

À mon avis, Pathname convient beaucoup mieux aux noms de fichiers qu'aux chaînes ordinaires.

 require "pathname"
Pathname.new(directory_name).children.select { |c| c.directory? }
 

Cela vous donne un tableau de tous les répertoires de ce répertoire sous forme d'objets Pathname.

Si vous voulez avoir des ficelles

 Pathname.new(directory_name).children.select { |c| c.directory? }.collect { |p| p.to_s }
 

Si directory_name était absolu, ces chaînes sont également absolues.

20voto

Bohr Points 450

Rechercher récursivement tous les dossiers sous un certain répertoire:

 Dir.glob 'certain_directory/**/*/'
 

Version non récursive:

 Dir.glob 'certain_directory/*/'
 

Remarque: Dir.[] fonctionne comme Dir.glob .

4voto

Jordan Points 26741

Vous pouvez utiliser File.directory? du module FileTest pour savoir si un fichier est un répertoire. La combinaison de ceci avec Dir.entries fait un joli (liner):

 directory = 'some_dir'
Dir.entries(directory).select { |file| File.directory? File.join(directory, file}
 

Edit: mis à jour selon la correction de ScottD.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X