una txt todos texto subcarpetas pasar obtener nombres los listas listado lista generador fichero crear como carpetas carpeta archivos ruby directory directory-listing

ruby - txt - obtener listado de archivos de una carpeta



Obtener una lista de carpetas en un directorio (12)

Creo que puedes probar cada archivo para ver si es un directorio con FileTest.directory? (file_name) FileTest.directory? (file_name) . Consulte la documentación de FileTest para obtener más información.

¿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 las carpetas.


En mi opinión, Pathname es mucho más adecuado para nombres de archivo que strings simples.

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

Esto le proporciona una matriz de todos los directorios en ese directorio como objetos Pathname.

Si quieres tener cuerdas

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

Si directory_name es absoluto, estas cadenas también son absolutas.


Encuentra recursivamente todas las carpetas en un directorio determinado:

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

Versión no recursiva:

Dir.glob ''certain_directory/*/''

Nota: Dir.[] Funciona como Dir.glob .


Jordan está cerca, pero Dir.entries no devuelve la ruta completa que File.directory? espera Prueba esto:

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


Lo encontré más útil y fácil de usar:

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

obtiene todas las carpetas en el directorio actual, excluidas . y ..

Para recurse carpetas simplemente use ** en lugar de * .

La línea Dir.glob también se puede pasar a Dir.chdir como un bloque:

Dir.chdir(''/destination directory'') do Dir.glob(''*'').select { |f| File.directory? f } end


Para una solución genérica es probable que desee utilizar

Dir.glob(File.expand_path(path))

Esto funcionará con rutas como ~/*/ (todas las carpetas dentro de su directorio de inicio).


Podemos combinar la respuesta de Borh y la respuesta de Johann para obtener una solución bastante elegante para obtener los nombres de directorio en una carpeta.

# user globbing to get a list of directories for a path base_dir_path = '''' directory_paths = Dir.glob(File.join(base_dir_path, ''*'', '''')) # or recursive version: directory_paths = Dir.glob(File.join(base_dir_path, ''**'', ''*'', '''')) # cast to Pathname directories = directory_paths.collect {|path| Pathname.new(path) } # return the basename of the directories directory_names = directories.collect {|dir| dir.basename.to_s }


Puede usar File.directory? del módulo FileTest para averiguar si un archivo es un directorio. Combinar esto con Dir.entries convierte en uno agradable (ish) -liner:

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

Editar: actualizado por la corrección de ScottD.


Solo las carpetas (''.'' Y ''..'' están excluidas):

Dir.glob(File.join(path, "*", File::SEPARATOR))

Carpetas y archivos:

Dir.glob(File.join(path, "*"))


$dir_target = "/Users/david/Movies/Camtasia 2/AzureMobileServices.cmproj/media" Dir.glob("#{$dir_target}/**/*").each do |f| if File.directory?(f) puts "#{f}/n" end end


Dir.glob(''/your_dir'').reject {|e| !File.directory?(e)}


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