¿Cómo obtengo una lista de las carpetas que existen en un directorio determinado con ruby?
Dir.entries() parece cercano pero no sé cómo limitarlo solo a carpetas.
ruby
directory
directory-listing
0xC0DEFACE
fuente
fuente

'.'(directorio actual) y'..'(padre del directorio actual). En la mayoría de los casos, desea eliminar al menos esos dos.Dir.entries(root).select { |entry| File.directory? File.join(root, entry) and not entry.in? %w[. ..]}Dir.glob.Dir.glob()como se ve en la otra respuesta; recomiendo encarecidamente hacer eso en lugar de estoEncontré esto más útil y fácil de usar:
obtiene todas las carpetas del directorio actual, excluidas
.y...Para carpetas recurrentes, simplemente use
**en lugar de*.La
Dir.globlínea también se puede pasarDir.chdircomo un bloque:fuente
**/*en lugar de*.En mi opinión,
Pathnamees mucho más adecuado para nombres de archivo que cadenas simples.Esto le da una matriz de todos los directorios en ese directorio como objetos Pathname.
Si quieres tener cuerdas
Si
directory_namefuera absoluto, estas cadenas también lo son.fuente
Pathnamees que elimina de forma automática.,..y los archivos como proprietery.DS_StoreBusque de forma recursiva todas las carpetas en un directorio determinado:
Versión no recursiva:
Nota:
Dir.[]funciona comoDir.glob.fuente
fuente
Puede utilizar
File.directory?desde elFileTestmódulo para averiguar si un archivo es un directorio. La combinación de esto conDir.entrieshace que sea agradable (ish) -liner:Editar: actualizado según la corrección de ScottD.
fuente
Con este, puede obtener la matriz de una ruta completa a sus directorios , subdirectorios , subsubdirectorios de forma recursiva. Usé ese código para cargar ansiosamente estos archivos dentro del
config/applicationarchivo.Además, no necesitamos lidiar con lo aburrido
.y..más. La respuesta aceptada necesitaba lidiar con ellos.fuente
fuente
reject !,selectfuente
Para una solución genérica que probablemente desee utilizar
Esto funcionará con rutas como
~/*/(todas las carpetas dentro de su directorio personal).fuente
Podemos combinar la respuesta de Borh y respuesta de Johannes a conseguir absolutamente una solución elegante para obtener los nombres de directorio en una carpeta.
fuente
Solo las carpetas ('.' Y '..' están excluidas):
Dir.glob(File.join(path, "*", File::SEPARATOR))Carpetas y archivos:
Dir.glob(File.join(path, "*"))fuente
Creo que puede probar cada archivo para ver si es un directorio con
FileTest.directory? (file_name). Consulte la documentación de FileTest para obtener más información.fuente