É possível criar um glob que corresponda aos arquivos no diretório atual e em todos os subdiretórios?

StackOverflow https://stackoverflow.com/questions/44481

  •  09-06-2019
  •  | 
  •  

Pergunta

Para esta estrutura de diretórios:

.
|-- README.txt
|-- firstlevel.rb
`-- lib
    |-- models
    |   |-- foo
    |   |   `-- fourthlevel.rb
    |   `-- thirdlevel.rb
    `-- secondlevel.rb

3 directories, 5 files

O globo corresponderia a:

firstlevel.rb 
lib/secondlevel.rb 
lib/models/thirdlevel.rb
lib/models/foo/fourthlevel.rb
Foi útil?

Solução

Peço desculpas se perdi o verdadeiro objetivo da pergunta, mas, se estivesse usando sh/bash/etc., provavelmente usaria encontrar para fazer o trabalho:

find . -name '*.rb' -type f

Globs podem ficar um pouco desagradáveis ​​quando usados ​​dentro de um script e encontrar é muito mais flexível.

Outras dicas

Em zsh, **/*.rb funciona

No próprio Ruby:

Dir.glob('**/*.rb') perhaps?

Parece que isso não pode ser feito de bash

Se você estiver usando zsh então

ls **/*.rb

produzirá o resultado correto.

Caso contrário, você pode sequestrar o ruby intérprete (e provavelmente os de outras línguas)

ruby -e "puts Dir.glob('**/*.rb')"

Obrigado a Chris e Gaius por suas respostas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top