¿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.glob
línea también se puede pasarDir.chdir
como un bloque:fuente
**/*
en lugar de*
.En mi opinión,
Pathname
es 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_name
fuera absoluto, estas cadenas también lo son.fuente
Pathname
es que elimina de forma automática.
,..
y los archivos como proprietery.DS_Store
Busque 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 elFileTest
módulo para averiguar si un archivo es un directorio. La combinación de esto conDir.entries
hace 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/application
archivo.Además, no necesitamos lidiar con lo aburrido
.
y..
más. La respuesta aceptada necesitaba lidiar con ellos.fuente
fuente
reject !
,select
fuente
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