Sei que existe um operador parecido com o *
, com a diferença que funciona em todos os subdiretórios.
Suponha que você tenha uma estrutura de pastas:
.
├── bar
│ ├── foo
│ │ └── baz
│ │ └── hurz
│ │ └── lolz
│ │ └── hello.txt
│ └── poit.txt
└── fnord.txt
Então, ls
com uma única estrela *
, listaria:
$ ls *.txt
fnord.txt
Espero que o operador **
de estrela dupla funcione nas subpastas, mas não está completo. Eu sei que isso pode funcionar, pois eu o habilitei em outra máquina, mas esqueci como.
$ ls **/*.txt
bar/poit.txt
Eu esperava que a saída se parecesse com:
ls **/*.txt
bar/foo/baz/hurz/lolz/hello.txt bar/poit.txt fnord.txt
Como é **
chamado o operador e como faço para ativá-lo corretamente?
Você está procurando a opção de shell globstar que foi introduzida na versão 4 do bash.
Se você não tem certeza de qual versão está executando, pode testá-la por meio de:
Verifique se está habilitado via:
O padrão é
off
. Se você quiser usá-lo, você deve ativá-lo:Então funcionará como esperado. Você pode querer adicionar isso ao seu
.bashrc
para que seja sempre ativado em novos shells.Para desativá-lo:
Consulte
help shopt
para obter detalhes.