È possibile creare un glob che corrisponda ai file nella directory corrente e in tutte le sottodirectory?
Domanda
Per questa struttura di directory:
.
|-- README.txt
|-- firstlevel.rb
`-- lib
|-- models
| |-- foo
| | `-- fourthlevel.rb
| `-- thirdlevel.rb
`-- secondlevel.rb
3 directories, 5 files
Il glob corrisponderebbe:
firstlevel.rb
lib/secondlevel.rb
lib/models/thirdlevel.rb
lib/models/foo/fourthlevel.rb
Soluzione
Mi scuso se non ho colto il vero punto della domanda ma, se stessi usando sh/bash/etc., probabilmente userei Trovare per fare il lavoro:
find . -name '*.rb' -type f
I globi possono diventare un po' sgradevoli se usati all'interno di uno script e Trovare è molto più flessibile.
Altri suggerimenti
In zsh, **/*.rb
lavori
Nello stesso Ruby:
Dir.glob('**/*.rb') perhaps?
Sembra che non sia possibile farlo da bash
Se usi zsh
Poi
ls **/*.rb
produrrà il risultato corretto.
Altrimenti puoi dirottare il file ruby
interprete (e probabilmente quelli di altre lingue)
ruby -e "puts Dir.glob('**/*.rb')"
Grazie a Chris e Gaius per le vostre risposte.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow