Comment obtenir une liste des dossiers qui existent dans un certain répertoire avec ruby?
Dir.entries()
semble proche mais je ne sais pas comment limiter uniquement les dossiers.
ruby
directory
directory-listing
0xC0DEFACE
la source
la source
'.'
(répertoire courant) et'..'
(parent du répertoire courant). Dans la plupart des cas, vous souhaitez supprimer au moins ces deux.Dir.entries(root).select { |entry| File.directory? File.join(root, entry) and not entry.in? %w[. ..]}
Dir.glob
.Dir.glob()
que l'on voit dans l'autre réponse - je recommande fortement de le faire au lieu de celaJ'ai trouvé cela plus utile et plus facile à utiliser:
il obtient tous les dossiers du répertoire courant, exclus
.
et..
.Pour récurer les dossiers, utilisez simplement
**
à la place de*
.La
Dir.glob
ligne peut également être passéeDir.chdir
sous forme de bloc:la source
**/*
à la place de*
.À mon avis, il
Pathname
est beaucoup mieux adapté aux noms de fichiers que les chaînes simples.Cela vous donne un tableau de tous les répertoires de ce répertoire en tant qu'objets Pathname.
Si vous voulez avoir des chaînes
Si
directory_name
c'était absolu, ces chaînes sont également absolues.la source
Pathname
est qu'il supprime automatiquement.
,..
et les fichiers propriétaires comme.DS_Store
Trouvez récursivement tous les dossiers dans un certain répertoire:
Version non récursive:
Remarque:
Dir.[]
fonctionne commeDir.glob
.la source
la source
Vous pouvez utiliser à
File.directory?
partir duFileTest
module pour savoir si un fichier est un répertoire. Combiner cela avecDir.entries
fait une belle doublure (ish):Edit: mis à jour par la correction de ScottD.
la source
Avec celui - ci, vous pouvez obtenir le tableau d'un chemin d' accès complet à vos répertoires , sous - répertoires , subsubdirectories de manière récursive. J'ai utilisé ce code pour charger ces fichiers avec impatience dans le
config/application
fichier.En outre , nous ne avons pas besoin traitons le ennuyeux
.
et..
plus. La réponse acceptée était nécessaire pour y faire face.la source
la source
reject !
,select
la source
Pour une solution générique que vous souhaitez probablement utiliser
Cela fonctionnera avec des chemins comme
~/*/
(tous les dossiers de votre répertoire personnel).la source
Nous pouvons combiner la réponse de Borh et la réponse de johannes pour obtenir tout à fait une solution élégante pour obtenir les noms de répertoire dans un dossier.
la source
Seuls les dossiers («.» Et «..» sont exclus):
Dir.glob(File.join(path, "*", File::SEPARATOR))
Dossiers et fichiers:
Dir.glob(File.join(path, "*"))
la source
Je pense que vous pouvez tester chaque fichier pour voir s'il s'agit d'un répertoire avec
FileTest.directory? (file_name)
. Consultez la documentation de FileTest pour plus d'informations.la source