É possível criar um glob que corresponda aos arquivos no diretório atual e em todos os subdiretórios?
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
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