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)}