Como faço para obter uma lista das pastas que existem em um determinado diretório com ruby?
Dir.entries()
parece perto, mas não sei como limitar apenas a pastas.
ruby
directory
directory-listing
0xC0DEFACE
fonte
fonte
'.'
(diretório atual) e'..'
(pai do diretório atual). Na maioria dos casos, você deseja remover pelo menos esses dois.Dir.entries(root).select { |entry| File.directory? File.join(root, entry) and not entry.in? %w[. ..]}
Dir.glob
.Dir.glob()
que visto na outra resposta - eu recomendo fortemente apenas fazer isso em vez dissoAchei isso mais útil e fácil de usar:
ele obtém todas as pastas no diretório atual, excluídas
.
e..
.Para recobrir pastas, basta usar
**
no lugar de*
.A
Dir.glob
linha também pode ser passadaDir.chdir
como um bloco:fonte
**/*
no lugar de*
.Em minha opinião,
Pathname
é muito mais adequado para nomes de arquivos do que strings simples.Isso fornece uma matriz de todos os diretórios naquele diretório como objetos Pathname.
Se você quiser ter cordas
Se
directory_name
fosse absoluto, essas strings também seriam absolutas.fonte
Pathname
é que ele remove automaticamente.
,..
e arquivos de propriedade como.DS_Store
Encontre recursivamente todas as pastas em um determinado diretório:
Versão não recursiva:
Nota:
Dir.[]
funciona comoDir.glob
.fonte
fonte
Você pode usar
File.directory?
oFileTest
módulo para descobrir se um arquivo é um diretório. Combinar isso comDir.entries
faz um belo forro (ish):Edit: Atualizado de acordo com a correção de ScottD.
fonte
Com este, você pode obter a matriz de um caminho completo para seus diretórios , subdiretórios , subsubdiretórios de forma recursiva. Usei esse código para carregar ansiosamente esses arquivos dentro do
config/application
arquivo.Além disso, não precisamos lidar com o chato
.
e..
mais. A resposta aceita precisava lidar com eles.fonte
fonte
reject !
,select
fonte
Para uma solução genérica que você provavelmente deseja usar
Isso funcionará com caminhos como
~/*/
(todas as pastas em seu diretório inicial).fonte
Podemos combinar a resposta de borh e resposta Johannes a ficar bastante uma solução elegante para obter os nomes de diretório em uma pasta.
fonte
Apenas pastas ('.' E '..' são excluídas):
Dir.glob(File.join(path, "*", File::SEPARATOR))
Pastas e arquivos:
Dir.glob(File.join(path, "*"))
fonte
Acho que você pode testar cada arquivo para ver se é um diretório com
FileTest.directory? (file_name)
. Consulte a documentação do FileTest para obter mais informações.fonte